24点游戏
来源:互联网 发布:ionic lab mac百度云 编辑:程序博客网 时间:2024/06/06 03:58
24点游戏大家都应该玩过吧,就是有四张牌,四张牌都是1到10的正整数,要求你只能使用+ - * / ()使最终的表达式的结果为24
比如四张牌是 1 3 6 9,那么24=(6-3)*(9-1).如果这四个数可以算出24,就输出样例的表达式,如果不能,就输出no
思路:这个题是个典型的dfs,总共的可能有4*4*4*4!=1536种,这里的符号每次需要更新,在最后需要判断()的地方,分几种情况,首先我们假设+ -为A,* /为B,那么最终的结果有AAA BBB ABA BAB AAB BBA ABB BAA 8种情况,ABB需要变为(A)BB,AAB需要变为(AA)B,BAB需要变为(BA)B,其他情况就不用特别处理。有很多人会问会不会出现这种情况,比如说2 10 7 3,会不会输出的结果是24=(2+10*7)/3,这种情况是不会出现的,结果的输出会是24=2*10-3+7,因为我们处理的时候是按照数列从小到大处理的。(即全排列从小到大,比如说123的全排列从小大到就是123 132 213 231 312 321)
附上代码:
#include <bits/stdc++.h>using namespace std;int check=0;char ah,bh,ch,symbel;void dfs(int index,int result,int arr[]){ switch(index) { case 2:ah=symbel;break;//第一个运算符 case 3:bh=symbel;break;//第二个运算符 case 4:ch=symbel;break;//第三个运算符 } if(result==24&&index==4){//找到了就更换标记 check=1; return; } if(index>=4||check)//如果没找到或者找到了都退出 return; for(int i=0;i<4;i++){ if(i==0){ symbel='+'; dfs(index+1,result+arr[index],arr); } else if(i==1){ symbel='-'; dfs(index+1,result-arr[index],arr); } else if(i==2){ symbel='*'; dfs(index+1,result*arr[index],arr); } else if(result%arr[index]==0){ symbel='/'; dfs(index+1,result/arr[index],arr); } if(check) break; }}int main(){ int num[4],n=100; while(n--){ check=0; printf("请输入四个大于0小于10的整数\n"); for(int i=0;i<4;i++) cin>>num[i]; sort(num,num+4); while(next_permutation(num,num+4)){//调用函数,数列进行全排列 dfs(1,num[0],num); if(check) break; } if(check){//符号的特别处理 if(ah!='*'&&ah!='/'){ if(bh=='*'||bh=='/') printf("24=(%d%c%d)%c%d%c%d\n",num[0],ah,num[1],bh,num[2],ch,num[3]); else if(ch=='*'||ch=='/') printf("24=(%d%c%d%c%d)%c%d\n",num[0],ah,num[1],bh,num[2],ch,num[3]); else printf("24=%d%c%d%c%d%c%d\n",num[0],ah,num[1],bh,num[2],ch,num[3]); } else if(bh!='*'&&bh!='/'){ if(ch=='*'||ch=='/') printf("24=(%d%c%d%c%d)%c%d\n",num[0],ah,num[1],bh,num[2],ch,num[3]); else printf("24=%d%c%d%c%d%c%d\n",num[0],ah,num[1],bh,num[2],ch,num[3]); } else printf("24=%d%c%d%c%d%c%d\n",num[0],ah,num[1],bh,num[2],ch,num[3]); } else cout<<"no"<<endl; } return 0;}
阅读全文
0 0
- 24点游戏代码
- 24点游戏
- 24点扑克牌游戏
- 24点游戏
- 24点游戏
- 《24点游戏》
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏源码
- 24点游戏
- 24点游戏-hero
- 24点游戏
- 24点游戏算法
- 四轴飞行器、远程视频图像传输
- AOP快速入门案例(一)
- Serverless
- leetcode 198. House Robber(DP问题)
- JAVA笔记-如何将百万级数据高效的导出到Excel表单
- 24点游戏
- [原创]Python 运行 shell 获取输出结果
- Vue 2.1.7 源码学习
- Redis-单个数据库结构---过期键
- unixODBC的使用
- 正定矩阵、二次型、合同、惯性定理、Hessian
- 用Zookeeper作为Spring cloud的配置中心
- Android MediaPlayer和VideoView的使用
- 快速掌握 Git 用法