- 24点游戏
- 2015-11-14 12:19:31 @
我的程序优化后居然比乱搞的分数还低,于是运行传说中题解的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 条评论
-
xiazhongyv LV 8 @ 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
- 1