正文

24点速算2007-06-06 14:13:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/26450.html

分享到:

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

阅读(3645) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册