题解 | #将真分数分解为埃及分数#

将真分数分解为埃及分数

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

用递归,每次求刚好比分数n小的分子是1的分数res就行。每次递归将求的res保存,n减去res,继续递归。非常容易理解。

n, res = list(map(int,input().split('/'))), []

def dfs(num):
    num = [1, num[1] // num[0]] if num[1] % num[0] == 0 else num  # 如果可以约分,则约分
    if num[0] == 1:  # 分子已经是1
        return res.append(num[1])
    i = (num[1] // num[0]) + 1  # 临近num的最大的分数的分母
    res.append(i)
    return dfs([num[0]*i - num[1], num[1]*i][::])  # num做减法后,寻找下一个num的结果

dfs(n[::])
print('+'.join([f'1/{i}' for i in res]))

全部评论

相关推荐

04-10 11:56
如皋中学 Java
高斯林的信徒:双c9能简历挂的?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务