从LeetCode 679. 24 Game–C++ 解法–二十四点 到穷举24点所有可能性

此文首发于我的个人博客:zhang0peter的个人博客


LeetCode题解文章分类:LeetCode题解文章集合
LeetCode 所有题目总结:LeetCode 所有题目总结


题目地址:24 Game - LeetCode


ou have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated through *, /, +, -, (, ) to get the value of 24.

Example 1:

Input: [4, 1, 8, 7]
Output: True
Explanation: (8-4) * (7-1) = 24

Example 2:

Input: [1, 2, 1, 2]
Output: False

Note:

  • The division operator / represents real division, not integer division. For example, 4 / (1 - 2/3) = 12.
  • Every operation done is between two numbers. In particular, we cannot use - as a unary operator. For example, with [1, 1, 1, 1] as input, the expression -1 - 1 - 1 - 1 is not allowed.
  • You cannot concatenate numbers together. For example, if the input is [1, 2, 1, 2], we cannot write this as 12 + 12.

这道题目是给指定的4个数字,算二十四点。本来是一道锻炼小学生的口算能力的题,用编程来解决反而比较困难。

最容易想到的方法是穷举,最大的问题在于运算符的优先级,尤其是小括号的存在,使得直接穷举没有那么简单。

但仔细考虑后,还是穷举的解法最现实,C++解法如下:

class Solution {public:bool judgePoint24(vector<int> &nums) {sort(nums.begin(), nums.end());do {if (valid(nums)) return true;} while (next_permutation(nums.begin(), nums.end()));return false;}private:inline bool valid(vector<int> &nums) {double a = nums[0], b = nums[1], c = nums[2], d = nums[3];if (valid(a + b, c, d) || valid(a - b, c, d) || valid(a * b, c, d) || valid(a / b, c, d)) return true;if (valid(a, b + c, d) || valid(a, b - c, d) || valid(a, b * c, d) || valid(a, b / c, d)) return true;if (valid(a, b, c + d) || valid(a, b, c - d) || valid(a, b, c * d) || valid(a, b, c / d)) return true;return false;}inline bool valid(double a, double b, double c) {if (valid(a + b, c) || valid(a - b, c) || valid(a * b, c) || b && valid(a / b, c)) return true;if (valid(a, b + c) || valid(a, b - c) || valid(a, b * c) || c && valid(a, b / c)) return true;return false;}inline bool valid(double a, double b) {if (abs(a + b - 24.0) < 0.0001 || abs(a - b - 24.0) < 0.0001 || abs(a * b - 24.0) < 0.0001 ||b && abs(a / b - 24.0) < 0.0001)return true;return false;}
};

既然单个24点可以穷举出来,那么所有的解自然可能枚举出来

事实证明现在计算机的运算速度是很快的,即使穷举也能很快算出结果。

Python穷举代码如下:

from operator import truediv, mul, add, subdef judgePoint24(A):if not A:return Falseif len(A) == 1:return abs(A[0] - 24) < 1e-6for i in range(len(A)):for j in range(len(A)):if i != j:B = [A[k] for k in range(len(A)) if i != k != j]for op in (truediv, mul, add, sub):if (op is add or op is mul) and j > i: continueif op is not truediv or A[j]:B.append(op(A[i], A[j]))if judgePoint24(B):return TrueB.pop()return Falseres = []
l = sorted(list(set(tuple(sorted([i, j, k, z])) for i in range(1, 11) for j in range(1, 11)for k in range(1, 11) for z in range(1, 11))))
for i in l:if judgePoint24(i) is True:res.append(i)

所有的可能性大全罗列如下,共566种可能性。

1, 1, 1, 8
1, 1, 2, 6
1, 1, 2, 7
1, 1, 2, 8
1, 1, 2, 9
1, 1, 2, 10
1, 1, 3, 4
1, 1, 3, 5
1, 1, 3, 6
1, 1, 3, 7
1, 1, 3, 8
1, 1, 3, 9
1, 1, 3, 10
1, 1, 4, 4
1, 1, 4, 5
1, 1, 4, 6
1, 1, 4, 7
1, 1, 4, 8
1, 1, 4, 9
1, 1, 4, 10
1, 1, 5, 5
1, 1, 5, 6
1, 1, 5, 7
1, 1, 5, 8
1, 1, 6, 6
1, 1, 6, 8
1, 1, 6, 9
1, 1, 7, 10
1, 1, 8, 8
1, 2, 2, 4
1, 2, 2, 5
1, 2, 2, 6
1, 2, 2, 7
1, 2, 2, 8
1, 2, 2, 9
1, 2, 2, 10
1, 2, 3, 3
1, 2, 3, 4
1, 2, 3, 5
1, 2, 3, 6
1, 2, 3, 7
1, 2, 3, 8
1, 2, 3, 9
1, 2, 3, 10
1, 2, 4, 4
1, 2, 4, 5
1, 2, 4, 6
1, 2, 4, 7
1, 2, 4, 8
1, 2, 4, 9
1, 2, 4, 10
1, 2, 5, 5
1, 2, 5, 6
1, 2, 5, 7
1, 2, 5, 8
1, 2, 5, 9
1, 2, 5, 10
1, 2, 6, 6
1, 2, 6, 7
1, 2, 6, 8
1, 2, 6, 9
1, 2, 6, 10
1, 2, 7, 7
1, 2, 7, 8
1, 2, 7, 9
1, 2, 7, 10
1, 2, 8, 8
1, 2, 8, 9
1, 2, 8, 10
1, 3, 3, 3
1, 3, 3, 4
1, 3, 3, 5
1, 3, 3, 6
1, 3, 3, 7
1, 3, 3, 8
1, 3, 3, 9
1, 3, 3, 10
1, 3, 4, 4
1, 3, 4, 5
1, 3, 4, 6
1, 3, 4, 7
1, 3, 4, 8
1, 3, 4, 9
1, 3, 4, 10
1, 3, 5, 6
1, 3, 5, 7
1, 3, 5, 8
1, 3, 5, 9
1, 3, 5, 10
1, 3, 6, 6
1, 3, 6, 7
1, 3, 6, 8
1, 3, 6, 9
1, 3, 6, 10
1, 3, 7, 7
1, 3, 7, 8
1, 3, 7, 9
1, 3, 7, 10
1, 3, 8, 8
1, 3, 8, 9
1, 3, 8, 10
1, 3, 9, 9
1, 3, 9, 10
1, 3, 10, 10
1, 4, 4, 4
1, 4, 4, 5
1, 4, 4, 6
1, 4, 4, 7
1, 4, 4, 8
1, 4, 4, 9
1, 4, 4, 10
1, 4, 5, 5
1, 4, 5, 6
1, 4, 5, 7
1, 4, 5, 8
1, 4, 5, 9
1, 4, 5, 10
1, 4, 6, 6
1, 4, 6, 7
1, 4, 6, 8
1, 4, 6, 9
1, 4, 6, 10
1, 4, 7, 7
1, 4, 7, 8
1, 4, 7, 9
1, 4, 8, 8
1, 4, 8, 9
1, 4, 9, 10
1, 4, 10, 10
1, 5, 5, 5
1, 5, 5, 6
1, 5, 5, 9
1, 5, 5, 10
1, 5, 6, 6
1, 5, 6, 7
1, 5, 6, 8
1, 5, 6, 9
1, 5, 6, 10
1, 5, 7, 8
1, 5, 7, 9
1, 5, 7, 10
1, 5, 8, 8
1, 5, 8, 9
1, 5, 8, 10
1, 5, 9, 9
1, 5, 9, 10
1, 5, 10, 10
1, 6, 6, 6
1, 6, 6, 8
1, 6, 6, 9
1, 6, 6, 10
1, 6, 7, 9
1, 6, 7, 10
1, 6, 8, 8
1, 6, 8, 9
1, 6, 8, 10
1, 6, 9, 9
1, 6, 9, 10
1, 7, 7, 9
1, 7, 7, 10
1, 7, 8, 8
1, 7, 8, 9
1, 7, 8, 10
1, 7, 9, 9
1, 7, 9, 10
1, 8, 8, 8
1, 8, 8, 9
1, 8, 8, 10
2, 2, 2, 3
2, 2, 2, 4
2, 2, 2, 5
2, 2, 2, 7
2, 2, 2, 8
2, 2, 2, 9
2, 2, 2, 10
2, 2, 3, 3
2, 2, 3, 4
2, 2, 3, 5
2, 2, 3, 6
2, 2, 3, 7
2, 2, 3, 8
2, 2, 3, 9
2, 2, 3, 10
2, 2, 4, 4
2, 2, 4, 5
2, 2, 4, 6
2, 2, 4, 7
2, 2, 4, 8
2, 2, 4, 9
2, 2, 4, 10
2, 2, 5, 5
2, 2, 5, 6
2, 2, 5, 7
2, 2, 5, 8
2, 2, 5, 9
2, 2, 5, 10
2, 2, 6, 6
2, 2, 6, 7
2, 2, 6, 8
2, 2, 6, 9
2, 2, 6, 10
2, 2, 7, 7
2, 2, 7, 8
2, 2, 7, 10
2, 2, 8, 8
2, 2, 8, 9
2, 2, 8, 10
2, 2, 9, 10
2, 2, 10, 10
2, 3, 3, 3
2, 3, 3, 5
2, 3, 3, 6
2, 3, 3, 7
2, 3, 3, 8
2, 3, 3, 9
2, 3, 3, 10
2, 3, 4, 4
2, 3, 4, 5
2, 3, 4, 6
2, 3, 4, 7
2, 3, 4, 8
2, 3, 4, 9
2, 3, 4, 10
2, 3, 5, 5
2, 3, 5, 6
2, 3, 5, 7
2, 3, 5, 8
2, 3, 5, 9
2, 3, 5, 10
2, 3, 6, 6
2, 3, 6, 7
2, 3, 6, 8
2, 3, 6, 9
2, 3, 6, 10
2, 3, 7, 7
2, 3, 7, 8
2, 3, 7, 9
2, 3, 7, 10
2, 3, 8, 8
2, 3, 8, 9
2, 3, 8, 10
2, 3, 9, 9
2, 3, 9, 10
2, 3, 10, 10
2, 4, 4, 4
2, 4, 4, 5
2, 4, 4, 6
2, 4, 4, 7
2, 4, 4, 8
2, 4, 4, 9
2, 4, 4, 10
2, 4, 5, 5
2, 4, 5, 6
2, 4, 5, 7
2, 4, 5, 8
2, 4, 5, 9
2, 4, 5, 10
2, 4, 6, 6
2, 4, 6, 7
2, 4, 6, 8
2, 4, 6, 9
2, 4, 6, 10
2, 4, 7, 7
2, 4, 7, 8
2, 4, 7, 9
2, 4, 7, 10
2, 4, 8, 8
2, 4, 8, 9
2, 4, 8, 10
2, 4, 9, 9
2, 4, 9, 10
2, 4, 10, 10
2, 5, 5, 7
2, 5, 5, 8
2, 5, 5, 9
2, 5, 5, 10
2, 5, 6, 6
2, 5, 6, 7
2, 5, 6, 8
2, 5, 6, 9
2, 5, 6, 10
2, 5, 7, 7
2, 5, 7, 8
2, 5, 7, 9
2, 5, 7, 10
2, 5, 8, 8
2, 5, 8, 9
2, 5, 8, 10
2, 5, 9, 10
2, 5, 10, 10
2, 6, 6, 6
2, 6, 6, 7
2, 6, 6, 8
2, 6, 6, 9
2, 6, 6, 10
2, 6, 7, 8
2, 6, 7, 9
2, 6, 7, 10
2, 6, 8, 8
2, 6, 8, 9
2, 6, 8, 10
2, 6, 9, 9
2, 6, 9, 10
2, 6, 10, 10
2, 7, 7, 8
2, 7, 7, 10
2, 7, 8, 8
2, 7, 8, 9
2, 7, 9, 10
2, 7, 10, 10
2, 8, 8, 8
2, 8, 8, 9
2, 8, 8, 10
2, 8, 9, 9
2, 8, 9, 10
2, 8, 10, 10
2, 9, 10, 10
3, 3, 3, 3
3, 3, 3, 4
3, 3, 3, 5
3, 3, 3, 6
3, 3, 3, 7
3, 3, 3, 8
3, 3, 3, 9
3, 3, 3, 10
3, 3, 4, 4
3, 3, 4, 5
3, 3, 4, 6
3, 3, 4, 7
3, 3, 4, 8
3, 3, 4, 9
3, 3, 5, 5
3, 3, 5, 6
3, 3, 5, 7
3, 3, 5, 9
3, 3, 5, 10
3, 3, 6, 6
3, 3, 6, 7
3, 3, 6, 8
3, 3, 6, 9
3, 3, 6, 10
3, 3, 7, 7
3, 3, 7, 8
3, 3, 7, 9
3, 3, 8, 8
3, 3, 8, 9
3, 3, 8, 10
3, 3, 9, 9
3, 3, 9, 10
3, 4, 4, 4
3, 4, 4, 5
3, 4, 4, 6
3, 4, 4, 7
3, 4, 4, 8
3, 4, 4, 9
3, 4, 4, 10
3, 4, 5, 5
3, 4, 5, 6
3, 4, 5, 7
3, 4, 5, 8
3, 4, 5, 9
3, 4, 5, 10
3, 4, 6, 6
3, 4, 6, 8
3, 4, 6, 9
3, 4, 6, 10
3, 4, 7, 7
3, 4, 7, 8
3, 4, 7, 9
3, 4, 7, 10
3, 4, 8, 9
3, 4, 8, 10
3, 4, 9, 9
3, 4, 10, 10
3, 5, 5, 6
3, 5, 5, 7
3, 5, 5, 8
3, 5, 5, 9
3, 5, 6, 6
3, 5, 6, 7
3, 5, 6, 8
3, 5, 6, 9
3, 5, 6, 10
3, 5, 7, 8
3, 5, 7, 9
3, 5, 7, 10
3, 5, 8, 8
3, 5, 8, 9
3, 5, 9, 9
3, 5, 9, 10
3, 5, 10, 10
3, 6, 6, 6
3, 6, 6, 7
3, 6, 6, 8
3, 6, 6, 9
3, 6, 6, 10
3, 6, 7, 7
3, 6, 7, 8
3, 6, 7, 9
3, 6, 7, 10
3, 6, 8, 8
3, 6, 8, 9
3, 6, 8, 10
3, 6, 9, 9
3, 6, 9, 10
3, 6, 10, 10
3, 7, 7, 7
3, 7, 7, 8
3, 7, 7, 9
3, 7, 7, 10
3, 7, 8, 8
3, 7, 8, 9
3, 7, 9, 9
3, 7, 9, 10
3, 7, 10, 10
3, 8, 8, 8
3, 8, 8, 9
3, 8, 8, 10
3, 8, 9, 9
3, 8, 9, 10
3, 8, 10, 10
3, 9, 9, 9
3, 9, 9, 10
3, 9, 10, 10
4, 4, 4, 4
4, 4, 4, 5
4, 4, 4, 6
4, 4, 4, 7
4, 4, 4, 8
4, 4, 4, 9
4, 4, 4, 10
4, 4, 5, 5
4, 4, 5, 6
4, 4, 5, 7
4, 4, 5, 8
4, 4, 5, 10
4, 4, 6, 8
4, 4, 6, 9
4, 4, 6, 10
4, 4, 7, 7
4, 4, 7, 8
4, 4, 7, 9
4, 4, 7, 10
4, 4, 8, 8
4, 4, 8, 9
4, 4, 8, 10
4, 4, 10, 10
4, 5, 5, 5
4, 5, 5, 6
4, 5, 5, 7
4, 5, 5, 8
4, 5, 5, 9
4, 5, 5, 10
4, 5, 6, 6
4, 5, 6, 7
4, 5, 6, 8
4, 5, 6, 9
4, 5, 6, 10
4, 5, 7, 7
4, 5, 7, 8
4, 5, 7, 9
4, 5, 7, 10
4, 5, 8, 8
4, 5, 8, 9
4, 5, 8, 10
4, 5, 9, 9
4, 5, 9, 10
4, 5, 10, 10
4, 6, 6, 6
4, 6, 6, 7
4, 6, 6, 8
4, 6, 6, 9
4, 6, 6, 10
4, 6, 7, 7
4, 6, 7, 8
4, 6, 7, 9
4, 6, 7, 10
4, 6, 8, 8
4, 6, 8, 9
4, 6, 8, 10
4, 6, 9, 9
4, 6, 9, 10
4, 6, 10, 10
4, 7, 7, 7
4, 7, 7, 8
4, 7, 8, 8
4, 7, 8, 9
4, 7, 8, 10
4, 7, 9, 9
4, 7, 9, 10
4, 7, 10, 10
4, 8, 8, 8
4, 8, 8, 9
4, 8, 8, 10
4, 8, 9, 9
4, 8, 9, 10
4, 8, 10, 10
4, 9, 9, 10
5, 5, 5, 5
5, 5, 5, 6
5, 5, 5, 9
5, 5, 6, 6
5, 5, 6, 7
5, 5, 6, 8
5, 5, 7, 7
5, 5, 7, 8
5, 5, 7, 10
5, 5, 8, 8
5, 5, 8, 9
5, 5, 8, 10
5, 5, 9, 9
5, 5, 9, 10
5, 5, 10, 10
5, 6, 6, 6
5, 6, 6, 7
5, 6, 6, 8
5, 6, 6, 9
5, 6, 6, 10
5, 6, 7, 7
5, 6, 7, 8
5, 6, 7, 9
5, 6, 8, 8
5, 6, 8, 9
5, 6, 8, 10
5, 6, 9, 9
5, 6, 9, 10
5, 6, 10, 10
5, 7, 7, 9
5, 7, 7, 10
5, 7, 8, 8
5, 7, 8, 9
5, 7, 8, 10
5, 7, 9, 10
5, 7, 10, 10
5, 8, 8, 8
5, 8, 8, 9
5, 8, 8, 10
5, 9, 10, 10
6, 6, 6, 6
6, 6, 6, 8
6, 6, 6, 9
6, 6, 6, 10
6, 6, 7, 9
6, 6, 7, 10
6, 6, 8, 8
6, 6, 8, 9
6, 6, 8, 10
6, 6, 9, 10
6, 7, 7, 10
6, 7, 8, 9
6, 7, 8, 10
6, 7, 9, 9
6, 7, 10, 10
6, 8, 8, 8
6, 8, 8, 9
6, 8, 8, 10
6, 8, 9, 9
6, 8, 9, 10
6, 9, 9, 10
6, 10, 10, 10
7, 7, 9, 10
7, 8, 8, 9
7, 8, 8, 10
7, 8, 9, 10
7, 8, 10, 10
8, 8, 8, 10

从LeetCode 679. 24 Game--C++ 解法--二十四点 到穷举24点所有可能性-24点大全相关推荐

  1. C语言 解决CCF 二十四点问题

    利用 C 语言 解决 CCF题库中的二十四点问题 特别致谢:原博主程序 编译环境: IDE:DEV-C++ 语言:C语言 CCF CSP官方往年题库链接点我进入 1. 题目如下: 解题思路: 此题难点 ...

  2. CCF-CSP 201903-2 二十四点 Python语言 模拟栈实现

    项目场景: 二十四点问题本质是处理表达式,一提到处理表达式第一反应大概就是使用栈来处理,虽然网上大部分使用python语言处理二十四点问题都是利用强大的eval()函数,但我仍然想要使用python的 ...

  3. CCF CSP201903-2二十四点

    CCF CSP201903-2二十四点 题目描述 要点分析 此题是典型的中缀表达式的求解问题, 可以采用堆栈求解. 具体计算思路: 使用两个栈, num用于存储操作数, opt用于存储操作符 从左往右 ...

  4. CCF201903-2 二十四点(100分)【表达式计算】

    问题链接:CCF201903-2 二十四点 问题分析: 表达式计算问题,关键是对输入流进行处理,需要考虑表达式中运算符的优先级.简单的逻辑,用穷举法就可以了. 用Python语言来实现的话,问题就简单 ...

  5. 『牛角书』基于JS实现的鸿蒙游戏——二十四点纸牌

    目录 前言 概述 正式开始 一.创建项目 二.编码 1.项目结构 2.实现思路 3.主要代码块 三.页面及功能展示 1.运算正确 2.运算错误 3.换一批及重置 本人项目仓库链接 前言 相信大家都有玩 ...

  6. CCF 201903-2 二十四点 用栈模拟简单计算器

    二十四点 来源:CCF 背景 二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24. 题目 定义每一个游戏由 4 个从 1-9 的数字和 3 个四 ...

  7. 「csp模拟试题 201903-2」二十四点 C/C++ 100分

    目录 题目 输入输出样例 题解思路 题解源码(c/c++) 题目 :二十四点 [问题描述] 定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号 ...

  8. csp试题2:二十四点

    csp试题2:二十四点 题目 分析 代码 总结 题目 问题描述       二十四点是一款著名的纸牌游戏,其游戏的目标是使用3个加减乘除运算使得4张纸牌上数字的运算结果为24.       定义每一个 ...

  9. 201903-2二十四点[20201213封笔题目]没写呢

    2020.12.13 csp今天就考试完了,我用了三天的时间,倒着刷完了所有的第一题,正着刷第二题,就到了这里.暂时结束吧. 哎,发现现在的考试越来越难了. 今天的考试连第二个体都过不了. 我死了. ...

最新文章

  1. python 列表使用
  2. Tomcat服务器 Varnish代理服务器
  3. 嵌入式linux 分区挂载,嵌入式linux系统的开发——文件系统的分区和挂载
  4. Ajax学习系列——向服务器发送请求
  5. 开放重定向(Open Redirection)
  6. 淮安中专学计算机哪个学校好,2021淮安初中十强排名 哪些初中比较好
  7. Netty新连接接入与NioSocketChannel分析
  8. 《C++ Primer Plus(第六版)》(11)(第八章 函数探幽 复习题答案)
  9. 打造狂拽炫酷的主流自定义侧滑控件(仿酷狗和QQ5.0)
  10. Atitit 概念还是技术更重要
  11. 黑苹果Big Sur下驱动高通模块Atheros DHXA-195(AR9285无线网卡和AR3011 蓝牙3.0)
  12. 测试方法——正交表法
  13. 计算机键盘调亮度,电脑屏幕亮度怎么调
  14. 萤火虫算法_一种优化方法:蜂鸟优化算法
  15. java fttp连接服务器操作
  16. 如何看旷视南京负责人魏秀参跳槽高校工作?
  17. 如何获得更多表情包_从资产商店获得更多
  18. 计算机导论知识梳理,《计算机导论》知识点
  19. 抖音视频如何去除水印
  20. 关于 Thread.currentThread()

热门文章

  1. 手把手教你画酷炫环形图(图文详解)
  2. CentOS Linux 7 安全基线设置
  3. mSystems和Microbiology Spectrum杂志“肠道微生态专题”论文征稿
  4. 微生物培养的福音:一个直接用16S rDNA序列来预测其培养基配方的网站!!!...
  5. NBT:人类微生物组千万基因的参考基因集
  6. GeenMedical让你知道本领域哪家强,该谁才是真同行,统计检索结果一作、通讯、关键字和国人发文
  7. 行业盛会!2018中国人体微生物组大会
  8. c语言int64编译时错误,错误:编译C程序时未在此作用域中声明uint64_t
  9. eclipse取消不了多行注释_Eclipse常用快捷键
  10. R语言函数:length计算长度、seq生成数据序列、rep将数据对象重复N遍复制、cut将连续变量分割为多水平的因子变量、pretty将连续变量x分成n个区间创建合适的断点、cat数据对象拼接