3 8 3 8 可以凑成24点啊 为何所有这道题的AC程序都有问题?

我的程序优化后居然比乱搞的分数还低,于是运行传说中题解的AC程序,我惊呆了了、、、、、、、
3 8 3 8全是输出0!

8/(3-8/3)=24啊!!!

我还针对3 8 3 8优化了括号的,结果WA 50分。。。。。。。

代码有点丑 但是还是发一下吧 求大犇帮我看下。。至于那些AC程序题解里面全是。。

CODE

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
double a[4],rnk[4];
int book[4];
double make(int oprt,double a,double b) {
switch (oprt) {
case 0:return a+b;
case 1:return a-b;
case 2:return a*b;
case 3:if (b!=0) return a/b;
}
return 0;
}
bool equal(double a,double b) {
if (a<b && a+0.001>b) return 1;
if (a>b && a>b+0.001) return 1;
return 0;
}
int findresult() {
double temp=0;
for (int i=0;i<4;i++)
for (int j=0;j<4;j++)
for (int k=0;k<4;k++) {
temp=make(i,rnk[0],rnk[1]);//1
temp=make(j,temp,rnk[2]);
temp=make(k,temp,rnk[3]);
if (equal(temp,24)) return 1;
temp=make(i,rnk[0],rnk[1]);//5
temp=make(j,temp,make(k,rnk[2],rnk[3]));
if (equal(temp,24)) return 1;
temp=make(i,rnk[0],make(j,rnk[1],rnk[2]));
temp=make(k,temp,rnk[3]);//6
if (equal(temp,24)) return 1;
temp=make(j,rnk[1],make(k,rnk[2],rnk[3]));
temp=make(i,rnk[0],temp);//4
if (equal(temp,24)) return 1;
temp=make(i,rnk[0],make(j,rnk[1],rnk[2]));
temp=make(k,temp,rnk[3]);//2
if (equal(temp,24)) return 1;
temp=make(k,make(j,rnk[1],rnk[2]),rnk[3]);
temp=make(i,rnk[0],temp);//3
if (equal(temp,24)) return 1;
}
return 0;
}
int dfs(int x) {
if (x==4) {
/* for (int i=0;i<=3;i++)
printf("%lf ",rnk[i]);
printf("\n");*/
int re=findresult();
if (re) return 1;
else return 0;
}
for (int i=0;i<4;i++) {
if (book[i]==0) {
book[i]=1;
rnk[x]=a[i];
int re=dfs(x+1);
if (re) return 1;
book[i]=0;
}
}
return 0;
}
int getit(char c) {
if (c=='A') return 1;
if (c=='J') return 11;
if (c=='Q') return 12;
if (c=='K') return 13;
return 0;
}
int main() {
for (int i=0;i<=3;i++) {
string r;
cin>>r;
if (r.size()==2)
a[i]=10;
else
if (r[0]>58)
a[i]=getit(r[0]);
else
a[i]=r[0]-48;
}
cout<<dfs(0);
return 0;
}

6 条评论

  • @ 2016-11-12 20:45:04

    除出的结果必须是整数(题目要求)

  • @ 2016-07-13 19:28:24

    所有的中间结果须是整数

  • @ 2016-07-13 19:28:10

    所有的中间结果须是整数

  • @ 2016-07-09 13:52:25

    不是说中间结果不能出现非整数吗?

  • @ 2015-11-22 19:37:03

    应该不存在小数的。

  • @ 2015-11-14 14:50:06

    srO

    • @ 2015-11-14 22:36:07

      二老板啊。。。求教啊,,,我的AC率啊。。。

    • @ 2015-11-22 22:26:58

      我猜测这里面的除法都是整除吧OwO

    • @ 2015-11-23 15:28:35

      并不是啊,整除的话3 8 3 8 也可以的。。。。。3/8+3*8

    • @ 2015-11-26 21:38:54

      必须要**能整除**嘛?

    • @ 2015-11-27 22:04:07

      啊 所以说 对于除法,只能是结果一定是整数不然不能除?好粗暴。。

    • @ 2015-11-29 00:00:46

      我理解是这样的。

  • 1

信息

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