题解 | #24点游戏算法#

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

使用枚举法,全排列所有可能顺序,运算符只有64种可能,判断最后结果是否为24即可。注意需要保证除法时要整除得到24才行

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

double cal(int num1, int num2, char opt) {
    if (opt == '+') return num1 + num2;
    else if (opt == '-') return num1 - num2;
    else if (opt == '*') return num1 * num2;
    else return (double)num1 / (double)num2;
}

bool judge(vector<int> nums, char opt[]) {

    sort(nums.begin(), nums.end());

    do {
        for (int i = 0; i < 4; i ++) {
            double num_12 = cal(nums[0], nums[1], opt[i]);
            for (int j = 0; j < 4; j ++) {
                double num_23 = cal(num_12, nums[2], opt[j]);
                for (int k = 0; k < 4; k ++) {
                    double num_34 = cal(num_23, nums[3], opt[k]);
                    if (num_34 == 24.0 ) {
                        // cout << "true" << endl;
                        // cout << num_34 << endl;
                        // cout << nums[0] << opt[i] << nums[1] << opt[j] << nums[2] << opt[k] << nums[3]<< endl;
                        return true;
                    }
                }
            }
        }
    } while (next_permutation(nums.begin(), nums.end()));

    return false;

}
int main() {
    vector<int> nums;
    for (int i = 0 ; i < 4; i ++) {
        int num = 0;
        cin >> num;
        nums.push_back(num);
    }

    char opt[4] = {'+', '-', '*', '/'};

    if(judge(nums, opt))
        cout << "true" << endl;
    else
        cout << "false" << endl;

}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
uu们,拒offer时hr很生气怎么办我哭死
爱睡觉的冰箱哥:人家回收你的offer,或者oc后没给你发offer的时候可不会愧疚你,所以你拒了也没必要愧疚他。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务