题解 | #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;
    }
}

全部评论

相关推荐

头像
03-23 02:34
Java
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务