当前位置: 首页 > news >正文

C++实现求解24点游戏

力扣原题:679. 24 点游戏 - 力扣(LeetCode)

判断四个数字能否通过加减乘除得到24点

使用回溯遍历四个数字的每一种组合,具体来说,每次从数组中选取两个数字以加减乘除四种方式得到一个新的数字,这样数组的规模会减少,从4个变成3个,再递归下去变成2个,最后变成一个的时候判断是否等于24

注意除法的存在需要用浮点数存储

注意样例 [3,3,8,8] 也是可以通过3-8/3得到1/3,然后用8➗1/3得到24,由于无法精确存储小数,所以和24比较相等时允许存在误差

class Solution {
public:
    bool judgePoint24(vector<int>& cards) {
        vector<float> nums(4);
        for (int i = 0; i < 4; ++i) {
            nums[i] = cards[i];
        }
        return dfs(nums);
    }
    bool dfs(vector<float>& nums) {
        if (nums.size() == 1) {
            return fabs(nums[0] - 24) < 1e-3;
        }
        for (int i = 0; i < nums.size(); ++i) {
            for (int j = 0; j < nums.size(); ++j) {
                if (i != j) {
                    vector<float> cards;
                    for (int k = 0; k < nums.size(); ++k) {
                        if (k != i && k != j) {
                            cards.push_back(nums[k]);
                        }
                    }
                    cards.push_back(nums[i] + nums[j]);
                    if (dfs(cards))
                        return true;
                    cards.pop_back();
                    cards.push_back(nums[i] - nums[j]);
                    if (dfs(cards))
                        return true;
                    cards.pop_back();
                    cards.push_back(nums[i] * nums[j]);
                    if (dfs(cards))
                        return true;
                    cards.pop_back();
                    cards.push_back(nums[i] / nums[j]);
                    if (dfs(cards))
                        return true;
                    cards.pop_back();
                }
            }
        }
        return false;
    }
};

相关文章:

  • 异步编程与流水线架构:从理论到高并发
  • docker安装redis
  • 深入解析计算机组成原理:从硬件架构到程序运行的本质
  • 【算法day18】合并两个有序链表——将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
  • 基于deepseek的智能语音客服【第四讲】封装milvus数据库连接池封装
  • Spring事务和事务传播机制
  • 浏览器自动携带cookie注意事项
  • 12:表的内外连接
  • LVGL学习1
  • 数据库练习2
  • 图像回归评价的常用指标
  • 个人学习编程(3-22) leetcode刷题
  • C++智能指针详解
  • 蓝桥杯备赛 背包问题
  • [项目]基于FreeRTOS的STM32四轴飞行器: 十一.MPU6050配置与读取
  • 建筑安全员考试:“实战演练” 关键词助力的答题提升策略
  • Sqlite3数据库
  • 客服机器人怎么才能精准的回答用户问题?
  • Linux shell脚本-概述、语法定义、自定义变量、环境变量、预设变量、变量的特殊用法(转义字符、单双引号、大小括号)的验证
  • Labview和C#调用KNX API 相关东西
  • 美大学建“私人联盟”对抗政府:学校已存在300年,特朗普才上任3个月
  • 美媒:受关税政策影响,美国电商平台近千种商品平均涨价29%
  • 人民日报头版:上海纵深推进浦东高水平改革开放
  • 百岁太极拳大师、陈氏太极拳第十一代嫡宗传人陈全忠逝世
  • 银川市市长信箱被指已读乱回,官方回应
  • 玉渊谭天丨“稀土管制让美国慌了”,美军工稀土储备仅够数月