题目描述:
输入描述:输入4个int整数给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利,输入4个1-10的数字。数字允许重复,(测试用例保证无异常数字)输出true or false。
输出描述:返回能否得到24点,能输出true,不能输出false
输入例子:7 2 1 10
输出例子:true
算法实现:
#include<iostream> #include<vector> #include<string> #include<cmath> using namespace std; /************************************************ * Author: 赵志乾 * Date: 2017-2-18 * Declaration: All Rigths Reserved !!! ***********************************************/ bool Is24(int n,vector<double>&ret); int main() { vector<double>number(4,0); for(int i=0;i<number.size();i++) cin>>number[i]; if(Is24(4,number)) cout<<"true"<<endl; else cout<<"false"<<endl; return 0; } bool Is24(int n,vector<double>&ret) { if(n==1) return fabs(ret[0]-24)<0.00001; for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { double a,b; a=ret[i]; b=ret[j]; ret[j]=ret[n-1]; ret[i]=a+b; if(Is24(n-1,ret)) return true; ret[i]=a-b; if(Is24(n-1,ret)) return true; ret[i]=b-a; if(Is24(n-1,ret)) return true; ret[i]=a*b; if(Is24(n-1,ret)) return true; if(a!=0) { ret[i]=b/a; if(Is24(n-1,ret)) return true; } if(b!=0) { ret[i]=a/b; if(Is24(n-1,ret)) return true; } ret[i]=a; ret[j]=b; } } return false; }