题解 | #将真分数分解为埃及分数# 不取巧也没有公式的硬做

将真分数分解为埃及分数

https://www.nowcoder.com/practice/e0480b2c6aa24bfba0935ffcca3ccb7b

分母分解成因子后 取其中的一些数 使它们的和等于分子即可

算因子和这里用例dfs回溯 特别注意要新传一个num_re = [i for i in nums] num_re.remove(x)

因为回溯很重要的是要还原 nums 不能对nums进行改动

while True:
    try:
        # 因子分解
        def div(n):
            out = [1]
            for i in range(2, int(n ** 0.5) + 1):
                if n % i == 0:
                    out.extend([i, n // i])
            return out

        # 数字合成
        def sum_div(nums, target, out):
            if target == 0:
                res.append(out)
                return True
            if target < 0 or sum(nums) < target:
                return False

            flag = False
            if nums:
                for x in nums:
                    num_re = [i for i in nums]
                    num_re.remove(x)
                    if sum_div(num_re, target - x, out + [x]):
                        flag = True
                        break

            return flag

        res = []

        x1, x2 = map(int, input().split("/"))

        i = 0
        while not res:
            i += 1
            divs = div(x2 * i)
            target = x1 * i
            if sum_div(divs, target, []):
                break

        out_res = ["1/" + str(x2 * i // d) for d in res[0]]
        print("+".join(out_res))
    except:
        break

全部评论

相关推荐

11-26 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务