题解 | #24点游戏算法# 递归
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
#include <iostream> #include <vector> using namespace std; void Print(vector<double> r){ for(int i=0;i<r.size();i++){ cout<<r[i]<<" "; } cout<<endl; } bool Check24(vector<double>nums,double res){ //判断是否能从nums的数组中算出res的值 if(nums.empty()) return res==0; for(int i=0;i<nums.size();i++){ vector<double>rest(nums); rest.erase(rest.begin()+i);//删除使用的数字 if(Check24(rest,res+nums[i])||Check24(rest,res-nums[i])||Check24(rest,res*nums[i])||Check24(rest,res/nums[i])){//每次往下递归都会修改res值。四个数问题变为3个数问题--2个数问题--1个数问题,如果最初的nums中有一组算法能组合出target,那么沿着这组算法往回找,最终会找到1个数的target=这个数,那么rest数组删空后,就会得到raget-这个数==0 的res。所以递归终止的时候看是否res==0 return true; } } return false; } int main() { vector<double> nums(4); while(cin>>nums[0]>>nums[1]>>nums[2]>>nums[3]){ if(Check24(nums,24)){//函数判断nums能否组合出target cout<<"true"<<endl; } else cout<<"false"<<endl; } }