突然发现四个5能凑成24点。。

5 5 5 5
5*5-5/5=25-1=24
应该是这样的对吧。。
但是用AC的程序跑了一遍结果是0。。
是数据弱 还是这样算本身就有问题。

14 条评论

  • @ 2015-10-04 18:51:26

    ###其实有些AC程序是一个一个枚举的,要修正这个错误,只需要记录扑克两两组合可得到的结果,再两对两对地匹配即可

    ###像这样:
    P113424点游戏Accepted
    记录信息
    评测状态 Accepted
    题目 P1134 24点游戏
    递交时间 2015-10-04 19:26:24
    代码语言 C++
    评测机 VijosEx
    消耗时间 84 ms
    消耗内存 1472 KiB
    评测时间 2015-10-04 19:26:25
    评测结果
    编译成功

    foo.cpp: In function 'int main()':
    foo.cpp:78:12: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
    if(x!=0&&(double)y/x==24||y!=0&&(double)x/y==24)ans=1;
    ^
    测试数据 #0: Accepted, time = 0 ms, mem = 1464 KiB, score = 10
    测试数据 #1: Accepted, time = 0 ms, mem = 1464 KiB, score = 10
    测试数据 #2: Accepted, time = 0 ms, mem = 1468 KiB, score = 10
    测试数据 #3: Accepted, time = 0 ms, mem = 1468 KiB, score = 10
    测试数据 #4: Accepted, time = 15 ms, mem = 1464 KiB, score = 10
    测试数据 #5: Accepted, time = 15 ms, mem = 1464 KiB, score = 10
    测试数据 #6: Accepted, time = 12 ms, mem = 1464 KiB, score = 10
    测试数据 #7: Accepted, time = 12 ms, mem = 1460 KiB, score = 10
    测试数据 #8: Accepted, time = 15 ms, mem = 1464 KiB, score = 10
    测试数据 #9: Accepted, time = 15 ms, mem = 1472 KiB, score = 10
    Accepted, time = 84 ms, mem = 1472 KiB, score = 100
    代码
    #include <iostream>
    #include <cstdio>
    #include <math.h>
    #include <string.h>
    #include <string>
    using namespace std;
    bool used[5];
    int a[5];
    bool mem[1000];
    double qiku[120][1001];
    int ans;
    void work(double now,int k)
    {
    if(k==5){
    if(now==24)ans=1;
    return;
    }
    int tot=0;
    if(k==3){
    for(int i=1;i<=4;i++){
    if(used[i]==true)tot+=1<<(i-1);
    }
    int s=++qiku[tot][0];
    qiku[tot][s]=now;
    }

    if(ans==1)return;
    for(int i=1;i<=4;i++){
    if(used[i])continue;
    used[i]=true;
    work(now+a[i],k+1);
    work(now-a[i],k+1);
    work(a[i]-now,k+1);
    work(now*a[i],k+1);
    if(now!=0)
    work(a[i]/now,k+1);
    if(a[i]!=0)
    work(now/a[i],k+1);
    used[i]=false;
    }
    }
    int main()
    {
    string s;
    for(int i=1;i<=4;i++)
    {
    cin>>s;
    if(s=="10")
    {a[i]=10;continue;}
    if(s[0]=='A') a[i]=1;
    if(s[0]<'A') a[i]=s[0]-'0';
    if(s[0]=='J') a[i]=11;
    if(s[0]=='Q') a[i]=12;
    if(s[0]=='K') a[i]=13;
    }
    ans=0;
    memset(used,0,sizeof(used));
    memset(qiku,0,sizeof(0));
    for(int i=1;i<=4;i++)
    {
    used[i]=true;
    work(a[i],2);
    work(-a[i],2);
    used[i]=false;
    }
    if(!ans)
    for(int i=1;i<=1;i+=2)
    for(int j=2;j<=4;j+=2){
    int tot=(1<<(i-1))+(1<<(j-1));
    int b=15-tot;
    for(int k=1;k<=qiku[tot][0];k++)
    {
    double x=qiku[tot][k];
    for(int l=1;l<=qiku[b][0];l++)
    {
    double y=qiku[b][l];
    if(x+y==24||x-y==24||y-x==24||x*y==24)ans=1;
    if(x!=0&&(double)y/x==24||y!=0&&(double)x/y==24)ans=1;
    }
    }
    }
    if(ans)
    printf("1\n");
    else printf("0\n");
    }

    ###然而用我的程序处理超多组数据的24点问题还是超时了(QAQ)

  • @ 2014-04-02 09:38:46

    4
    [ Σ cos(!ai) ]!=24 (手动斜眼)

    i=1

  • @ 2014-03-20 11:54:24

    ??

  • @ 2014-03-19 20:55:09

    好像是这样

  • @ 2014-03-18 18:32:35

    数据若

  • @ 2014-03-09 16:08:03

    数据弱…………

  • @ 2014-01-22 12:01:45

    数据弱无误……

  • @ 2014-01-22 08:55:09
  • @ 2014-01-22 07:33:08

    那可未必,3 Q Q Q貌似用枚举跑出来是0.
    实际上(3-Q/Q)*Q=24。

  • @ 2014-01-20 17:51:09

    这是因为你的程序是不正确的,然后碰巧过了而已

  • @ 2014-01-20 17:36:51

    应该是数据弱吧……其他有AC代码跑出1的……直接暴力枚举应该能过吧……貌似操作数才4! 乘 4^3=24 乘 64而已吧……

  • @ 2014-01-20 16:21:07

    orz好像没问题

  • @ 2014-01-20 16:11:40

    Orz不怕超时的人

  • @ 2014-01-20 15:21:46

    这题果断全排列,在用枚举

  • 1

信息

ID
1134
难度
8
分类
搜索 点击显示
标签
(无)
递交数
9082
已通过
852
通过率
9%
被复制
7
上传者