题解 | #24点游戏算法#
24点游戏算法
http://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
#include <bits/stdc++.h>
using namespace std;
char operation[4] = { '+','-','*','/' };
bool vis[4];
//这个题目并没有限制使用括号以及数字顺序可以改变
double num[4];
bool dfs(double cur,int idx) {
if (cur == 24 && idx == 4)
return true;
for (int i = 0; i < 4; i++) {//用vis数组来判别是否被使用过
if(vis[i]==false){
vis[i]=true;
if (dfs(cur + num[i], idx + 1) || dfs(cur - num[i], idx + 1) || dfs(cur * num[i], idx + 1) || dfs(cur / num[i], idx + 1))
return true;
vis[i]=false;
}
}
return false;
}
int main() {
while (cin >> num[0] >> num[1] >> num[2] >> num[3]) {
memset(vis,0,sizeof(vis));
if (dfs(0,0))
cout << "true" << endl;
else
cout << "false" << endl;
}
}