以下是一个使用 Python 编写的 24 点游戏算法程序:

import itertools

def calculate(num1, num2, operator):
    if operator == '+':
        return num1 + num2
    elif operator == '-':
        return num1 - num2
    elif operator == '*':
        return num1 * num2
    elif operator == '/':
        if num2 != 0:
            return num1 / num2
        else:
            return None

def find_24(nums):
    operators = ['+', '-', '*', '/']
    perms = itertools.permutations(nums) # 生成所有数字排列的组合
    for perm in perms:
        for ops in itertools.product(operators, repeat=3): # 生成所有操作符排列的组合
            a = perm[0]
            b = perm[1]
            c = perm[2]
            d = perm[3]
            op1 = ops[0]
            op2 = ops[1]
            op3 = ops[2]
            
            # 尝试所有可能的计算顺序和括号组合
            result = calculate(calculate(calculate(a, b, op1), c, op2), d, op3)
            if result == 24:
                return f'(({a} {op1} {b}) {op2} {c}) {op3} {d}'
            
            result = calculate(calculate(a, calculate(b, c, op2), op1), d, op3)
            if result == 24:
                return f'({a} {op1} ({b} {op2} {c})) {op3} {d}'
            
            result = calculate(a, calculate(calculate(b, c, op2), d, op3), op1)
            if result == 24:
                return f'{a} {op1} (({b} {op2} {c}) {op3} {d})'
            
            result = calculate(a, calculate(b, calculate(c, d, op3), op2), op1)
            if result == 24:
                return f'{a} {op1} ({b} {op2} ({c} {op3} {d}))'
            
            result = calculate(calculate(a, calculate(b, c, op2), op1), calculate(c, d, op3), op1)
            if result == 24:
                return f'({a} {op1} ({b} {op2} {c})) {op1} ({c} {op3} {d})'

    return 'No solution found.'

# 测试
nums = [4, 5, 6, 7]
print(find_24(nums))

这个程序使用了迭代工具itertools来生成所有数字和操作符的排列组合。然后,通过尝试所有可能的计算顺序和括号组合,找到可以得到 24 的表达式。如果找到解,则返回表达式;如果没有找到解,则返回'No solution found.'。

在上面的示例中,我们测试了数字列表[4, 5, 6, 7],你可以尝试其他数字列表来测试程序。请注意,这个算法只能找到一个解,可能不是唯一的解。

Python 24点游戏算法实现:查找数字组合

原文地址: https://www.cveoy.top/t/topic/puNc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录