本文主要是介绍hiho一下 第九十八周 题目1 : 搜索一·24点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目1 : 搜索一·24点
-
2 5 5 5 1 9 9 9 9
样例输出 -
Yes No
描述
周末,小Hi和小Ho都在家待着。
在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间。
小Ho:玩点什么好呢?
小Hi:两个人啊,不如来玩24点怎么样,不靠运气就靠实力的游戏。
小Ho:好啊,好啊。
<经过若干局游戏之后>
小Ho:小Hi,你说如果要写个程序来玩24点会不会很复杂啊?
小Hi:让我想想。
<过了几分钟>
小Hi:我知道了!其实很简单嘛。
提示:24点
输入
第1行:1个正整数, t,表示数据组数,2≤t≤100。
第2..t+1行:4个正整数, a,b,c,d,1≤a,b,c,d≤10。
输出
第1..t行:每行一个字符串,第i行表示第i组能否计算出24点。若能够输出"Yes",否则输出"No"。
#include <stdio.h>
#include <math.h>
double num[4];
bool dfs(int n)
{if(n==1){//n=1时 最终的结果保存在num[0] if(fabs(num[0]-24)<0.000001)return true;elsereturn false;}for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){double x=num[i];double y=num[j];//已经使用过的数 使它等于最后一个数 num[j]=num[n-1];num[i]=x+y;if(dfs(n-1)) return true;num[i]=x-y;if(dfs(n-1)) return true;num[i]=y-x;if(dfs(n-1)) return true;num[i]=x*y;if(dfs(n-1)) return true;//避免除0 if(y){num[i]=x/y;if(dfs(n-1)) return true;}//避免除0 if(x){num[i]=y/x;if(dfs(n-1)) return true;}//回溯 num[i]=x;num[j]=y;}}return false;
}
int main()
{int n;scanf("%d",&n);while(n--){scanf("%lf %lf %lf %lf",&num[0],&num[1],&num[2],&num[3]);if(dfs(4))puts("Yes");elseputs("No");}return 0;
}
题目1 : 搜索一·24点
-
2 5 5 5 1 9 9 9 9
样例输出 -
Yes No
描述
周末,小Hi和小Ho都在家待着。
在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间。
小Ho:玩点什么好呢?
小Hi:两个人啊,不如来玩24点怎么样,不靠运气就靠实力的游戏。
小Ho:好啊,好啊。
<经过若干局游戏之后>
小Ho:小Hi,你说如果要写个程序来玩24点会不会很复杂啊?
小Hi:让我想想。
<过了几分钟>
小Hi:我知道了!其实很简单嘛。
提示:24点
输入
第1行:1个正整数, t,表示数据组数,2≤t≤100。
第2..t+1行:4个正整数, a,b,c,d,1≤a,b,c,d≤10。
输出
第1..t行:每行一个字符串,第i行表示第i组能否计算出24点。若能够输出"Yes",否则输出"No"。
#include <stdio.h>
#include <math.h>
double num[4];
bool dfs(int n)
{if(n==1){//n=1时 最终的结果保存在num[0] if(fabs(num[0]-24)<0.000001)return true;elsereturn false;}for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){double x=num[i];double y=num[j];//已经使用过的数 使它等于最后一个数 num[j]=num[n-1];num[i]=x+y;if(dfs(n-1)) return true;num[i]=x-y;if(dfs(n-1)) return true;num[i]=y-x;if(dfs(n-1)) return true;num[i]=x*y;if(dfs(n-1)) return true;//避免除0 if(y){num[i]=x/y;if(dfs(n-1)) return true;}//避免除0 if(x){num[i]=y/x;if(dfs(n-1)) return true;}//回溯 num[i]=x;num[j]=y;}}return false;
}
int main()
{int n;scanf("%d",&n);while(n--){scanf("%lf %lf %lf %lf",&num[0],&num[1],&num[2],&num[3]);if(dfs(4))puts("Yes");elseputs("No");}return 0;
}
这篇关于hiho一下 第九十八周 题目1 : 搜索一·24点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!