深搜专题初步-1006
来源:互联网 发布:雪迪龙网络报销系统 编辑:程序博客网 时间:2024/05/21 06:19
1006
时间限制(普通/Java):1000MS/10000MS 内存限制:65536KByte
总提交: 8 测试通过: 5 描述
速算24点相信绝大多数人都玩过。就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'运算符以及括号改变运算顺序,使得最终运算结果为24(每个数必须且仅能用一次)。游戏很简单,但遇到无解的情况往往让人很郁闷。你的任务就是针对每一组随机产生的四张牌,判断是否有解。我们另外规定,整个计算过程中都不能出现小数。
输入
每组输入数据占一行,给定四张牌。
输出
每一组输入数据对应一行输出。如果有解则输出"Yes",无解则输出"No"。
样例输入
A 2 3 63 3 8 8
样例输出
YesNo
代码:
#include<cstdio>#include<string.h>#include<algorithm>using namespace std;int flag;int num[4];int cmp(const void *a,const void *b){return *(int *)a-*(int *)b;} void dfs(int sum,int cur,int m){ if(flag) return; if(m==3) { if(sum+cur==24||sum-cur==24||sum*cur==24) flag=1; if(cur!=0&&sum%cur==0&&sum/cur==24) flag=1; return; } dfs(sum+cur,num[m+1],m+1); dfs(sum-cur,num[m+1],m+1); dfs(sum*cur,num[m+1],m+1); if(cur!=0&&sum%cur==0) dfs(sum/cur,num[m+1],m+1); dfs(sum,cur+num[m+1],m+1); dfs(sum,cur-num[m+1],m+1); dfs(sum,cur*num[m+1],m+1); if(num[m+1]!=0&&cur%num[m+1]==0) dfs(sum,cur/num[m+1],m+1);}int main(){int i;char str[5];while(~scanf("%s",str)){if(strlen(str)==2)num[0]=10;else {if(str[0]=='A')num[0]=1;else if(str[0]=='J')num[0]=11;else if(str[0]=='Q')num[0]=12;else if(str[0]=='K')num[0]=13; else num[0]=str[0]-'0'; }for(i=1;i<=3;i++){scanf("%s",str);if(strlen(str)==2)num[i]=10;else { if(str[0]=='A') num[i]=1;else if(str[0]=='J')num[i]=11;else if(str[0]=='Q')num[i]=12;else if(str[0]=='K')num[i]=13;else num[i]=str[0]-'0';}}qsort(num,4,sizeof(num[0]),cmp);flag=0;do{dfs(num[0],num[1],1);}while(next_permutation(num,num+4)&&!flag);if(flag)printf("Yes\n");else printf("No\n");}return 0;}
1006
时间限制(普通/Java):1000MS/10000MS 内存限制:65536KByte
总提交: 8 测试通过: 5
总提交: 8 测试通过: 5
描述
速算24点相信绝大多数人都玩过。就是随机给你四张牌,包括A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13)。要求只用'+','-','*','/'运算符以及括号改变运算顺序,使得最终运算结果为24(每个数必须且仅能用一次)。游戏很简单,但遇到无解的情况往往让人很郁闷。你的任务就是针对每一组随机产生的四张牌,判断是否有解。我们另外规定,整个计算过程中都不能出现小数。
输入
每组输入数据占一行,给定四张牌。
输出
每一组输入数据对应一行输出。如果有解则输出"Yes",无解则输出"No"。
样例输入
A 2 3 63 3 8 8
样例输出
YesNo
代码:
#include<cstdio>#include<string.h>#include<algorithm>using namespace std;int flag;int num[4];int cmp(const void *a,const void *b){return *(int *)a-*(int *)b;} void dfs(int sum,int cur,int m){ if(flag) return; if(m==3) { if(sum+cur==24||sum-cur==24||sum*cur==24) flag=1; if(cur!=0&&sum%cur==0&&sum/cur==24) flag=1; return; } dfs(sum+cur,num[m+1],m+1); dfs(sum-cur,num[m+1],m+1); dfs(sum*cur,num[m+1],m+1); if(cur!=0&&sum%cur==0) dfs(sum/cur,num[m+1],m+1); dfs(sum,cur+num[m+1],m+1); dfs(sum,cur-num[m+1],m+1); dfs(sum,cur*num[m+1],m+1); if(num[m+1]!=0&&cur%num[m+1]==0) dfs(sum,cur/num[m+1],m+1);}int main(){int i;char str[5];while(~scanf("%s",str)){if(strlen(str)==2)num[0]=10;else {if(str[0]=='A')num[0]=1;else if(str[0]=='J')num[0]=11;else if(str[0]=='Q')num[0]=12;else if(str[0]=='K')num[0]=13; else num[0]=str[0]-'0'; }for(i=1;i<=3;i++){scanf("%s",str);if(strlen(str)==2)num[i]=10;else { if(str[0]=='A') num[i]=1;else if(str[0]=='J')num[i]=11;else if(str[0]=='Q')num[i]=12;else if(str[0]=='K')num[i]=13;else num[i]=str[0]-'0';}}qsort(num,4,sizeof(num[0]),cmp);flag=0;do{dfs(num[0],num[1],1);}while(next_permutation(num,num+4)&&!flag);if(flag)printf("Yes\n");else printf("No\n");}return 0;}
0 0
- 深搜专题初步-1006
- 深搜专题初步-1002
- 深搜专题初步-1001
- 深搜专题初步-1003
- 深搜专题初步-1004
- 深搜专题初步-1005
- 深搜专题
- 深搜专题
- 深搜专题小结
- 深搜专题(DFS大法好!)
- 深搜专题——木棒
- 专题一 · 1006
- 专题二 1006
- 专题三1006
- 1006-F专题三
- SDAU dp专题 1006
- acm专题三1006
- 专题三 · 1006
- gcc编译原理
- C/C++常用时间函数介绍
- 堆和栈内存分配问题
- 手机掌控家居,体验新鲜智能家居生…
- 智能家居
- 深搜专题初步-1006
- 智能家居带来冲击,墙面开关面临消…
- fread 返回 0的情况
- 文字渐变效果:图层中的mask属性
- 根据ip获取对应地区
- perror 使用
- 讲述属性动画的使用 —使用动画旋转、平移、渐变和缩放
- malloc 分配内存 也是需要占用内存
- vim 快捷键