蓝桥杯算法训练-24点(Python)
问题描述
24点游戏是一个非常有意思的游戏,很流行,玩法很简单:给你4张牌,每张牌上有数字(其中A代表1,J代表11,Q代表12,K代表13),你可以利用数学中的加、减、乘、除以及括号想办法得到24,例如:
((A*K)-J)*Q等价于((1*13)-11)*12=24
加减乘不用多说了,但除法必须满足能整除才能除!这样有一些是得不到24点的,所以这里只要求求出不超过24的最大值。输入格式
输入第一行N(1<=N<=5)表示有N组测试数据。每组测试数据输入4行,每行一个整数(1到13)表示牌值。
输出格式
每组测试数据输出一个整数,表示所能得到的最大的不超过24的值。
样例输入
3
3
3
3
3
1
1
1
1
12
5
13
1样例输出
24
4
21
我的思路:
这道题考察深度优先搜索算法,回溯,递归。设有四个数字a,b,c,d,四个数字中任意两个数(比如a和b)无非进行加减乘除中的一种操作(比如a+b),这时就剩下三个数字(a+b),c,d 。剩下的三个数字中任意两个数字也重复上一步操作(比如(a+b)*c),就剩下两个数字(a+b)*c,d 。重复这样的操作,直到只剩一个数字时结束,再判断该数字与24的关系。
实际代码中,将四个数字放入列表,让列表中任意两个数字都进行加减乘除操作,并在每次操作后都将结果加入列表(记得将进行操作的两个数字删除),重复操作,直到列表长度为1。
100分代码如下
# 2022.3.18
# 蓝桥杯算法训练-24点
# 知识点:深度优先搜索算法
# 我的思路:在一个由4个数字组成的列表中,让每一个数字都与其他三个数字进行
# 加减乘除,并将计算得到的结果加入进列表中,同时在列表中删除进行计算的两个数字,
# 通过递归进行,递归出口为列表长度为1的时候。n = int(input())
nums = [[] for i in range(n)]
for i in range(n*4):nums[i//4].append(int(input()))
def dfs(arr):#print(arr)global res, flag, sto # res为计算结果;flag标记计算结果是否为24;sto用于储存小于24的计算结果if flag == 1: # flag==1说明找到最终结果了returnif len(arr) == 1: # 递归出口res = arr[0]if res == 24:flag = 1sto = [24] # 当计算结果为24时,直接令sto=[24]returnelif res > 24: # 计算结果大于24的不要returnelse:sto.add(res) # 计算结果小于24的加入集合中,最后取集合最大值得到最终结果returnfor i in range(len(arr)):a = arr[i]arr2 = arr.copy() # 作用与回溯相同,用了arr2就不需要回溯了arr2.pop(i)for j in range(len(arr2)):b = arr2[j]c = a + b # 加法,把a与b的和加入列表中,同时删除a与b。arr2.pop(j)arr2.insert(j, c)dfs(arr2)arr2.pop(j) # 回溯arr2.insert(j, b) # 回溯d = a - b # 减法arr2.pop(j)arr2.insert(j, d)dfs(arr2)arr2.pop(j) # 回溯arr2.insert(j, b) # 回溯e = a * b # 乘法arr2.pop(j)arr2.insert(j, e)dfs(arr2)arr2.pop(j) # 回溯arr2.insert(j, b) # 回溯if b != 0:if a % b == 0: f = a // b # 除法arr2.pop(j)arr2.insert(j, f)dfs(arr2)arr2.pop(j) # 回溯arr2.insert(j, b) # 回溯for arr in nums:sto = set([])flag = 0res = 0dfs(arr)end = max(sto)print(end)
提交结果
蓝桥杯算法训练-24点(Python)相关推荐
- 蓝桥杯算法训练cowboys-dp-递归-python题解
cowboys(dp+递归) 问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一刻 ...
- 蓝桥杯 算法训练 幸运的店家
蓝桥杯 算法训练 幸运的店家 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 炫炫开了一家商店,卖的货只有一个,XXX,XXX卖N元钱.有趣的是,世界上只有面值为3的幂的纸 ...
- 蓝桥杯 算法训练 Beaver's Calculator
蓝桥杯 算法训练 Beaver's Calculator 问题描述 从万能词典来的聪明的海狸已经使我们惊讶了一次.他开发了一种新的计算器,他将此命名为"Beaver's Calculator ...
- 蓝桥杯 算法训练 印章
蓝桥杯 算法训练 印章 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入输出: 一行两个正整数n和m 一个实数P表示答案,保留4位小数. 样例: 2 3 ...
- 蓝桥杯——算法训练——数字三角形
蓝桥杯--算法训练--数字三角形 这道题不难,但是比较典型,可以作为动态规划(dp)的入门篇,属于线性dp(LIS,LCS和数字三角形都是此类题型). ------------------------ ...
- 蓝桥杯算法训练-强力党逗志芃
持续更新蓝桥杯算法训练题解,有兴趣可以关注一波呀 题目 逗志芃励志要成为强力党,所以他将身上所以的技能点都洗掉了重新学技能.现在我们可以了解到,每个技能都有一个前提技能,只有学完了前提技能才能学习当前 ...
- 蓝桥杯 算法训练 逗志芃的危机
蓝桥杯 算法训练 逗志芃的危机 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和 ...
- 蓝桥杯算法训练-过河马
蓝桥杯算法训练题解有兴趣的可以支持下. 题目 问题描述 在那个过河卒逃过了马的控制以超级超级多的走法走到了终点之后,这匹马表示它不开心了-- 于是,终于有一天,它也过河了! 由于过河马积累了许多的怨念 ...
- 蓝桥杯——算法训练——进击的青蛙
问题描述 青蛙X正准备跳过一座桥,这座桥被划分为N段,记青蛙所在的起始点为0,桥的末端为N.桥上的一些点有一些石子,这些点是无法跳上去的.青蛙每次跳跃能向前跳跃+1,+2,+3段,现在请你算出跳到末端 ...
最新文章
- react中使用构建缓存_如何在React中构建热图
- c++实现平面上的形状编辑
- 计算机网络·“存储-转发”式分组交换网
- Cannot add product to Opportunity in Fiori - RFC error
- yum php fpm5.6,CentOS 7 yum 安装php5.6
- ci框架 mysql 超时时间_mysql 字符集和校验规则( CHARSET amp; COLLATE)
- C语言运算符的优先级及结合性
- RAC 安装完成后 节点间通信不依赖于SSH
- Ubuntu下搭建git服务器步骤
- 计算机视觉基本研究方向
- 网易云服务器上传文件,网易云音乐怎么把音乐上传到云盘 网易云音乐把音乐上传到云盘的步骤方法...
- vue uniapp如何实现横向滚动周历,横向滚动一周日历
- 2015腾讯校园招聘软件测试部分笔试题
- 阿里全国脱贫攻坚先进-万祥军:谋定中国农民丰收节交易会
- Git HEAD detached from origin(冲突解决后无法正常push) 问题的解决方案
- YOLOV5dataset.py代码注释与解析
- 计算机二级模板文档,江苏省计算机二级
- FileNotFoundError: [Errno 2] No such file or directory: ‘pretrained/gated-conv.pth‘
- 上半年最中意的 GitHub 更新「GitHub 热点速览 v.22.21」
- 春节红包活动如何应对10亿级流量?看大佬复盘总结