1. 题目
2. 代码
- 首先,题目说明不够清晰。应该是4个数字可以任意排序(全排列,偷个小懒用STL函数next_permutation,排序也用了sort),而且可以加括号。
- 有除法,所以用了double。但是!double一定要从一而终啊!中间好几个地方写成了int,结果找了好久好久的bug。(果然我是个bug产生器。。。)
#include <iostream>
#include <algorithm>
using namespace std;
double x[4];
double sum;
int a[4];
int oppo[4] = {1, 0, 3, 2};
bool flag;
double cal(double num, int dir, int k){
switch(dir){
case 0: num += x[k]; break;
case 1: num -= x[k]; break;
case 2: num *= x[k]; break;
case 3: num /= x[k]; break;
default: ;
}
return num;
}
void dfs(int k){
if(k == 4){
if(sum == 24){
flag = true;
}
return;
}
for(int i=0; i<4; i++){
sum = cal(sum, i, k);
a[k] = i;
dfs(k+1);
sum = cal(sum, oppo[i], k);
}
}
int main(){
while(cin >> x[0] >> x[1] >> x[2] >> x[3]){
flag = false;
sort(x, x+4);
do{
sum = x[0];
dfs(1);
if(flag){
break;
}
}while(next_permutation(x, x+4));
if(flag){
cout << "true" << endl;
}
else{
cout << "false" << endl;
}
}
return 0;
}