【牛客网华为机试】HJ67 24点游戏算法

题目

描述

问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
输入:
4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字。
输出:

true or false

本题含有多组样例输入。

输入描述:

输入4个int整数

输出描述:

返回能否得到24点,能输出true,不能输出false

示例1

输入:

7 2 1 10

输出:

true

解题思路

(1)用递归算法进行求解

(2)每次取出列表中的第一个元素,设置目标值为24,用24对其进行加减乘除

(3)最后一层为为只剩最后一个元素

(4)只需要满足其中一条路径为24,则输出True,全部不满足则输出False

代码

def func(data, tar):
    if len(data)==1:
        return data[0]==tar
    else:
        for i in range(len(data)):
            data = data[1:] + [data[0]]
            if func(data[1:], tar+data[0]) or func(data[1:], tar-data[0]) or func(data[1:], tar*data[0]) or func(data[1:], tar/data[0]):
                return True
        return False
    
while True:
    try:
        data = list(map(int, input().split()))
        n = len(data)
        print(str(func(data, 24)).lower())
    except Exception as e:
        break
            

Reference

华为机试题库_在线编程+题解_牛客题霸_牛客网

你可能感兴趣的:(python,面试,算法,华为,python,递归,数据结构)