问题描述
速算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; }
评论