问题描述
速算24点相信绝大多数人都玩过。就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'运算符以及括号改变运算顺序,使得最终运算结果为24(每个数必须且仅能用一次)。游戏很简单,但遇到无解的情况往往让人很郁闷。你的任务就是针对每一组随机产生的四张牌,判断是否有解。我们另外规定,整个计算过程中都不能出现小数。
输入
输入数据占一行,给定四张牌。
输出
如果有解则输出"Y",无解则输出"N"。
输入样例
A 2 3 6
输出样例
Y
// my code 2007--6--6
#include <stdio.h>
#include <ctype.h>
int Get(int j, int sum,int a[]){
if(j==4 && sum==24)
return 1;
else if(j==4)
return 0;
if(Get(j+1,sum+a[j],a))
return 1;
if(Get(j+1,sum-a[j],a))
return 1;
if(Get(j+1,sum*a[j],a))
return 1;
if(Get(j+1,sum/a[j],a))
return 1;
return 0;
}
int main(){
int i,j,k,t,a[4];
char d[4];
scanf("%c %c %c %c",&d[0],&d[1],&d[2],&d[3]);
for(i = 0; i < 4; i++)
a[i] = (isdigit(d[i]) ? d[i]-48 : d[i]-64);
for(i = k = 0; k < 24; k++){
if(Get(1,a[0],a)){
printf("Y\n");
return 0;
}
j = (i >= 3 ? 0 : i+1);
t = a[i];
a[i] = a[j];
a[j] = t;
i = j;
}
printf("N\n");
return 0;
}

评论