python二十四点_Python实现24点游戏(完美解决去重和括号问题)

本文详细介绍了如何用Python实现24点游戏的算法,包括将四维问题转化为二维问题的降低维度方法,加括号的策略,以及去除等价重复表达式的规则。通过递归和组合操作,实现对给定数字的全部可能运算,以求得目标值24,并提供了一个完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

24点游戏是一款老少咸宜的益智游戏,游戏的玩法是给出任意四个数字,通过加减乘除四则运算,计算出24。

网上有很多24点游戏算法,找出解法并不难,但是难在如何合适地加括号和去除等价的重复表达式上。

1. 目标和要求

我们的目标是给定任意N个正整数(N > 1),找到能够将这N个数通过四则运算计算得出24的全部表达式,并且只在必要的时候加上括号以及去除等价的重复表达式。

首先,我们要明确什么是合适的括号?就是指在不影响计算结果的前提下,能不加括号尽量不加括号,比如:

(15 + 8) + 7 -6 = 24 应写作 15 + 8 + 7 -6 = 24

其次,什么是等价的重复表达式呢?就是完全相同的表达式,或者是在加法交换率和乘法交换率的作用下,完全等价的表达式。比如:

10 + 12 + 7 - 5 = 24 等价于 10 - 5 +7 + 12 = 24

15 * 8 / (1 + 4) = 24 等价于 15 / (4 + 1) * 8 = 24

(3 + 1) * (2 + 4) = 24 等价于 (1 + 3) * (4 + 2) = 24

2. 算法

2.1. 求全部解算法

我采用的算法是降低维度的算法,即把多维问题降低到二维来解决。

比如,给定四个数字[1, 2, 3, 4],这是一个四维问题,我们首先要将其转换为二维问题。具体的办法是,先将四个数字其中的两个数字取出,然后将这两个数字转化为所能组成的全部表达式。

我们首先取出[1, 2],考虑到加法交换率和乘法交换率的前提下,共有6种可能的不等价表达式,即1+2, 1-2, 1*2, 1/2, 2-1, 2/1,则四维问题就可以转化为多组三维问题,即['1+2', 3, 4],['1-2', 3, 4],['1*2', 3, 4], ['1/2', 3, 4], ['2-1', 3, 4], ['2/1', 3, 4]。

然后我们穷尽每一种取出两个数的组合,使用排列组合公式即C(4, 2),所以将四维问题转化为三维问题共有C(4, 2) * 6 = 36种组合。

下一步是重复这一过程,将三维问题继续转化为二维问题,同理,每一个三维问题都可转化为等价的二维问题,共有C(3, 2) * 6 = 18种组合。

所以,四维问题可转化为36 * 18 = 648种二维问题,每个二维问题又有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值