题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
#include <iostream> #include <istream> #include <vector> using namespace std; // 简单递归 // 对于每一个数字, 递归遍历加减乘除的情况, 直到剩下最后一个数字, 判断 // 除法的时候需要判断是否能整除 bool isTF(vector<int> nums, int last){ if(nums.size() == 1){ if(nums[0] == last){ return true; }else{ return false; } } bool flag = false; for(int i = 0; i < nums.size(); i++){ vector<int> temp; for(int j = 0; j < nums.size(); j++){ if(i != j){ temp.push_back(nums.at(j)); } } int now = nums.at(i); if(isTF(temp, last + now) || isTF(temp, last - now) || isTF(temp, last * now)){ flag = true; } if(last % now == 0){ if(isTF(temp, last / now)){ flag = true; } } } return flag; } int main() { int a; vector<int> nums; while (cin >> a) { // 注意 while 处理多个 case nums.push_back(a); if(nums.size() == 4){ cout << boolalpha << isTF(nums, 24) << endl; nums.clear(); } } } // 64 位输出请用 printf("%lld")