[华为oj]24点问题
2015-09-06 16:18
459 查看
这里提供自己解二十四点的思路。总的思路就是用类似递归思想:
(1)在4个数中选两个数进行运算,与另外两个数放在一起,执行步骤(2);
判断步骤(2)返回结果,为1,返回结果1;为0,继续下一个运算,直至结束,返回结果0;
(2)在3个数中选两个数进行运算,与另一个数放在一起,执行步骤(3);
判断步骤(3)返回结果,为1,返回结果1;为0,继续下一个运算,直至结束,返回结果0;
(3)对两个数进行运算,判断是否为24。是,返回1;否,返回0。
这个思想就是穷举方法,列出所有可能的情况,有个好处就是不需要考虑括号的情况。代码比较多,但应该比较好理解一点。两个细节:
1)在两个数进行运算的时候,需要把先后顺序也考虑进去。
2)当除数为0时,显然不满足情况,因此,返回一个比较大的值。
具体代码如下:
(1)在4个数中选两个数进行运算,与另外两个数放在一起,执行步骤(2);
判断步骤(2)返回结果,为1,返回结果1;为0,继续下一个运算,直至结束,返回结果0;
(2)在3个数中选两个数进行运算,与另一个数放在一起,执行步骤(3);
判断步骤(3)返回结果,为1,返回结果1;为0,继续下一个运算,直至结束,返回结果0;
(3)对两个数进行运算,判断是否为24。是,返回1;否,返回0。
这个思想就是穷举方法,列出所有可能的情况,有个好处就是不需要考虑括号的情况。代码比较多,但应该比较好理解一点。两个细节:
1)在两个数进行运算的时候,需要把先后顺序也考虑进去。
2)当除数为0时,显然不满足情况,因此,返回一个比较大的值。
具体代码如下:
#include <iostream> using namespace std; char op[4]={'+','-','*','/'}; float CalNum(float a,float b,char op) { if(b==0) return 10000; float t=0; switch(op) { case '+': t=a+b; break; case '-': t=a-b; break; case '*': t=a*b; break; case '/': t=a/b; break; } return t; } float Cal2Num(float a[]) { float result=0; for(int i=0;i<2;i++) { for(int p=0;p<4;p++) { result=CalNum(a[i],a[1-i],op[p]); if(result==24) { return 1; } } } return 0; } float Cal3Num(float a[]) { float a2[2]; for(int i3=0;i3<3;i3++) { for(int j3=i3+1;j3<3;j3++) { for(int k=0;k<3;k++) { if(k!=i3&&k!=j3) a2[1]=a[k]; } for(int p=0;p<4;p++) { for(int d=0;d<2;d++) { if(d==0) a2[0]=CalNum(a[i3],a[j3],op[p]); else a2[0]=CalNum(a[j3],a[i3],op[p]); if(Cal2Num(a2)) return 1; } } } } return 0; } float Cal4Num(float a[]) { float a3[3]; for(int i=0;i<4;i++) { for(int j=i+1;j<4;j++) { int t=1; for(int m=0;m<4;m++) { if(m!=i&&m!=j) a3[t++]=a[m]; } for(int p=0;p<4;p++) { for(int d=0;d<2;d++) { if(d==0) a3[0]=CalNum(a[i],a[j],op[p]); else a3[0]=CalNum(a[j],a[i],op[p]); if(Cal3Num(a3)) return 1; } } } } return 0; } int main() { float a4[4]; cin>>a4[0]>>a4[1]>>a4[2]>>a4[3]; if(Cal4Num(a4)) cout<<"true"<<endl; else cout<<"false"<<endl; return 0; }
相关文章推荐
- 检查所有实体的编号是否重复
- WPF学习开发历程(三)——文本控件
- IOS9 SDK下载、设备安装IOS9系统
- 工作周报058
- 这是mybatis最简单的入门
- [LeedCode OJ]#83 Remove Duplicates from Sorted List
- JS模板引擎的实现原理
- linux关机
- XCode实现注释所选行/**/功能
- Yii布局
- spring注解总结
- POJ 1019:Number Sequence 二分查找
- log4j中Spring控制台输出Debug级信息过多解决方法
- POJ 1019:Number Sequence 二分查找
- wget
- Javascript封装DOMContentLoaded事件
- 通过telnet特殊字符进行ftp攻击逃逸
- 逻辑回归的向量化实现样例
- 工作周报057
- C++ 牛人博客(不断更新中...)