大家一起来玩游戏(20 分)
24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它能在游戏中提高人们的心算能力。24点通常是使用扑克牌来进行游戏的,一副牌中抽去大小王后还剩下52张(如果初练也可只用1~10这40张牌),任意抽取4张牌(称为牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须只能用一次,如抽出的牌是3、8、8、9,那么算式为(9-8)×8×3或3×8÷(9-8)或(9-8÷8)×3等。比如 1 5 5 5,算式为5*(5-(1/5));
输入格式:
第一行输入n,表示n组测试数据,后面n行,每一行输入4个1-10的数字。[数字允许重复,测试用例保证无异常数字]
输出格式:
每组测试数据如果可以满足24点,则输出True,否则输出False,空格间隔后输出下一组结果,所有输出只占一行(行末无多余空格)。
输入样例:
2
1 5 5 5
5 1 1 1
输出样例:
True False
借鉴了大神的点子,不然我这个24点怕是要用穷举法打到怀疑人生,这题相对于其他版本比较水,但也算是一种算法了。
以下是代码内容
#include <stdio.h> #include <stdlib.h> #include <math.h> int count=4; double num[4]; int result=24; double precision=1e-6; int test(int n) { int i,j; if(n==1) { if(fabs(num[0]-result)<precision) { return 1; } else return 0; } for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { double a,b; a=num[i]; b=num[j]; num[j]=num[n-1]; num[i]=a+b; if(test(n-1)) return 1; num[i]=a-b; if(test(n-1)) return 1; num[i]=b-a; if(test(n-1)) return 1; num[i]=a*b; if(test(n-1)) return 1; num[i]=a/b; if(test(n-1)) return 1; num[i]=b/a; if(test(n-1)) return 1; num[i]=a; num[j]=b; } } return 0; } int main() { int flag=0; int n; scanf("%d",&n); while(n--) { int i; for(i=0;i<4;i++) { scanf("%lf",&num[i]); } if(!flag) { if(test(count)==1) printf("True"); else printf("False"); flag=1; } else { if(test(count)==1) printf(" True"); else printf(" False"); } } return 0; }