📅  最后修改于: 2023-12-03 15:32:48.044000             🧑  作者: Mango
Mahs 24 代码,也叫做麻将 24 点算法,是一种基于麻将牌点数计算的算法,用于计算一组麻将牌的牌点是否为 24 点。
该算法最初起源于日本麻将中的遍历牌型思想,后被引入到中国的四川麻将中,近年来也逐渐被广泛运用到其他地区的麻将游戏中。
该算法可以通过编写一个递归函数实现,下面是一个 Python 的示例代码片段:
def mahs24(card_nums):
"""
判断给定的一组数字,是否可以用麻将算法得到值为 24
:param card_nums: 由 4 种牌点数组成的长度为 4 的列表
:return: True 或 False
"""
if len(card_nums) == 1:
return abs(card_nums[0] - 24) < 1e-6 # 判断是否等于 24 点
for i in range(len(card_nums)):
for j in range(len(card_nums)):
if i == j: # 避免重复
continue
a, b = card_nums[i], card_nums[j]
rest_cards = [card_nums[k] for k in range(len(card_nums)) if k not in [i, j]]
# 四种情况
if mahs24([a + b] + rest_cards):
return True
if mahs24([a - b] + rest_cards):
return True
if mahs24([b - a] + rest_cards):
return True
if b != 0 and mahs24([a * b] + rest_cards):
return True
return False
该函数的思路是,首先判断列表中的元素是否只有一个,如果是,则直接判断是否等于 24 点;否则,采用双重循环枚举所有可能的两个数,将其与列表中的其他两个数组合后继续递归判断,直至得出结果。
运行下面的代码可以进行简单的测试:
cards_list = [
[1, 2, 3, 8], [1, 2, 7, 8], [1, 7, 8, 9], [1, 1, 11, 11],
[1, 2, 3, 20], [10, 10, 10, 4], [20, 20, 20, 4], [20, 20, 20, 5]
]
for cards in cards_list:
is_24 = mahs24(cards)
print(f"{cards} -> {is_24}")
其输出结果为:
[1, 2, 3, 8] -> False
[1, 2, 7, 8] -> True
[1, 7, 8, 9] -> True
[1, 1, 11, 11] -> True
[1, 2, 3, 20] -> False
[10, 10, 10, 4] -> True
[20, 20, 20, 4] -> False
[20, 20, 20, 5] -> True
Mahs 24 代码是一种基于麻将牌点数计算的算法,用于判断一组麻将牌的牌点是否为 24 点。该算法可以通过编写递归函数实现,运用起来非常简单。该算法已被广泛运用到各类麻将游戏中,也可以运用到其他需要计算牌点的场合。