递归典中典
#include <iostream>
using namespace std;
int flag[4] = {0};
double num[4] = {0};
int sign = 0;
//flag数组作为递归的时候不断变化的数组,应该是形参,而不是固定参数?
//其实并非如此,因为程序运行是单线程,所以,用固定参数也可以,运行完之后,flag数组会回到原来的状态
void dfs(double value, int step) {
// cout << value << " ";
if (step == 4){
if(value == 24) sign = 1;
}
else {
// cout << "trst" ;
for (int i = 0; i < 4; i++) {
if (flag[i] != 1) {
flag[i] = 1;
step++;
// cout << 'step = ' << step << endl;
dfs(value + num[i], step);
dfs(value - num[i], step);
dfs(value * num[i], step);
dfs(value / num[i], step);
flag[i] = 0;
step--;
}
}
}
}
int main() {
while (cin >> num[0] >> num[1] >> num[2] >>num[3]) { // 注意 while 处理多个 case
}
// cout << num[1] << endl;
dfs(0,0);
if(sign){
cout << "true"<< endl;
}else{
cout << "false" << endl;
}
}
// 64 位输出请用 printf("%lld")