首页 > 试题广场 >

24点游戏算法

[编程题]24点游戏算法
  • 热度指数:139151 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且需考虑括号运算。
此题允许数字重复,如3 3 4 4为合法输入,此输入一共有两个3,但是每个数字只允许使用一次,则运算过程中两个3都被选取并进行对应的计算操作。

输入描述:

读入4个[1,10]的整数,数字允许重复,测试用例保证无异常数字。



输出描述:

对于每组案例,输出一行表示能否得到24点,能输出true,不能输出false

示例1

输入

7 2 1 10

输出

true
头像 白茶12138
发表于 2021-09-28 04:25:31
def helper(arr,item):#先写一个利用递归+枚举解决算24的程序 if item<1: return False if len(arr)==1:#递归终点,当数组arr只剩一个数的时候,判断是否等于item return ar 展开全文
头像 牛客282688597号
发表于 2022-03-21 14:29:59
我觉得有几个分享的方法不对。 1.没有考虑到用括号的情况。比如:5 9 7 1,这个是能够计算出24的,9-5=4,7-1=6,4*6=24。用他们分享的代码运行是false。 2.对于拿到的第一个数值,有存在0/n的情况,比如:7 8 9 24(虽然24不符合传入要求),他 展开全文
头像 不会做题的小菜鸡
发表于 2021-12-08 10:59:04
题目分析 题目给出我们四个数字 我们要通过任意四则运算来使得这四个数字的运算结果可以得到结果24,但是每个数字都只能且必须使用一次 方法一:暴力 (方法一暂时有问题 有些用例如2 5 2 7不能过暂时...由于方法一只能顺序作计算,不能处理先2*5,2*7,后作和的运算...等着后面更新hh 展开全文
头像 生白
发表于 2021-02-19 16:59:11
直接深度优先搜索所有情况,全部进行计算,然后得出结果,最后有一个测试用例过不了,后面想到应该是数据的除法问题,可能因为精度丢失近似24,而int类型会认为是24,全部修改成double类型之后就能过了 #include<stdio.h> #include<string.h> 展开全文
头像 摸鱼学大师
发表于 2021-10-29 14:00:11
题目的主要信息: 给出4个1-10的数字,通过加减乘除,得到数字为24就输出true,否则false 数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字 方法一:穷举遍历 具体做法: 四个数字,如下图,一共需要3个运算符,我们可以遍历这个位置的4种运算,计算每种组合的结果,查看是否等 展开全文
头像 牛客390777145号
发表于 2020-11-12 14:56:10
使用DFS求解“24点游戏算法” 1.题目 问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利输入:4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字]输出:true or false 示例:输入: 7 2 1 10输出 true2.思路精要: 展开全文
头像 冷心为上
发表于 2022-03-06 14:40:43
import java.io.*; /* 知识点:递归、深度优先搜索、回溯算法 */ public class Main { public static void main(String[] args) throws IOException{ BufferedReader 展开全文
头像 人生苦短,但求成长
发表于 2022-02-11 14:35:45
import itertools def fun(arr, y): # 前面的结果与后一个数加减乘除的可能 res = [] for x in arr: res.append(x) res.append(y) res.ap 展开全文
头像 日不落拓海海
发表于 2022-02-19 21:41:01
import copy def dps(num): if len(num)==1: return abs(abs(num[0]) - 24) < 0.00001 for i in range(len(num)): for j in range( 展开全文
头像 牛客374676145号
发表于 2022-03-11 21:39:01
学习大神思路然后再码一遍 def cal_24(s, res): if len(s) == 1: return s[0] == res for i in range(len(s)): mid = s[i] rest = s[:i] + 展开全文