VIJOS-P1134 24点游戏 dfs

来源:互联网 发布:网络排错大讲解 编辑:程序博客网 时间:2024/05/29 16:15

Description

        几十年前全世界就流行一种数字扑克游戏,至今仍有人乐此不疲.在中国我们把这种游戏称为“算24点”。您作为游戏者将得到4个1-13(在扑克牌里用A代替1,J代替11,Q代替12,K代替13)之间的自然数作为操作数,而您的任务是对这4个操作数进行适当的算术运算,判断运算结果是否等于24。能输出1,不能输出0。

Input

四个牌面值。牌面值与牌面值之间用一个空格隔开。

Output

输出0或1。

Sample Input

3 8 10 Q

Sample Output

1

HINT

Q×(10/(8-3))=24




#include<stdio.h>char s[5];int flag;double ans,a[5];void dfs(int n,double *t){double c[5];if(flag==1)return;if(n==1){if(t[1]>=24-0.0000001&&t[1]<=24+0.0000001){printf("1");flag=1;return;}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i!=j){double x=t[i],y=t[j];int cnt=1;for(int k=1;k<=n;k++)if(k!=i&&k!=j)c[cnt++]=t[k];ans=x+y;c[cnt]=ans;dfs(n-1,c);ans=x-y;c[cnt]=ans;dfs(n-1,c);ans=x*y;c[cnt]=ans;dfs(n-1,c);if(y!=0.0) {ans=x/y;c[cnt]=ans;dfs(n-1,c);}}}}}int main(){for(int i=1;i<=4;i++){scanf("%s",s);if(s[1]=='0')a[i]=10;else if(s[0]=='J')a[i]=11;else if(s[0]=='Q')a[i]=12;else if(s[0]=='K')a[i]=13;else if(s[0]=='A')a[i]=1;else a[i]=s[0]-'0';}dfs(4,a);if(flag==0)printf("0");}


原创粉丝点击