正文

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;
}

阅读(3525) | 评论(2)


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

评论

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