题目1 : 搜索一·24点
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
- 样例输入
-
2 5 5 5 1 9 9 9 9
- 样例输出
-
Yes No
描述
周末,小Hi和小Ho都在家待着。
在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间。
小Ho:玩点什么好呢?
小Hi:两个人啊,不如来玩24点怎么样,不靠运气就靠实力的游戏。
小Ho:好啊,好啊。
<经过若干局游戏之后>
小Ho:小Hi,你说如果要写个程序来玩24点会不会很复杂啊?
小Hi:让我想想。
<过了几分钟>
小Hi:我知道了!其实很简单嘛。
输入
第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; else return 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"); else puts("No"); } return 0; }
题目1 : 搜索一·24点
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
- 样例输入
-
2 5 5 5 1 9 9 9 9
- 样例输出
-
Yes No
描述
周末,小Hi和小Ho都在家待着。
在收拾完房间时,小Ho偶然发现了一副扑克,于是两人考虑用这副扑克来打发时间。
小Ho:玩点什么好呢?
小Hi:两个人啊,不如来玩24点怎么样,不靠运气就靠实力的游戏。
小Ho:好啊,好啊。
<经过若干局游戏之后>
小Ho:小Hi,你说如果要写个程序来玩24点会不会很复杂啊?
小Hi:让我想想。
<过了几分钟>
小Hi:我知道了!其实很简单嘛。
输入
第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; else return 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"); else puts("No"); } return 0; }
时间: 2024-10-03 22:29:13