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

将真分数分解为埃及分数

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

此题分无脑解法和正统解法两种,分别来介绍一下吧。
假设:a是分子,b是分母。

一、无脑解法:

这个解法有点耍流氓,并没有真正意义上锻炼到思维,但还是说一下。
不管给什么分数,也不管能不能整除,直接把原数分解成a个1/b就行了。所以核心代码就2行。 也就是说第一个例子8/11,就被硬生生的分成8个1/11相加,然后竟然就通过了。

while True:
    try: 
        a, b = map(int, input().split('/'))
        print('+'.join([f'1/{b}' for i in range(a)])) 
    except: 
        break

-------------------------------------------------------------------

二、正统解法:

从a到0进行倒叙遍历,看有没有数可以被b整除,如果有,那么就把这个数添加到一个空列表中,最后把列表中的结果统一用加号串起来打印出来即可。当然如果遇到像11这种素数作为分母的分数,又非要分成埃及分数而且不耍流氓,那么就只能分子分母同时乘以10,这样问题就解决了。

while True:
    try:
        a, b = map(int, input().split('/'))
        a *= 10
        b *= 10
        res = []
        while a:
            for i in range(a, 0, -1):
                if b % i == 0:
                    res.append(f'1/{int(b/i)}')
                    a -= i
                    break
        print('+'.join(res))
    except:
        break
全部评论
我直接被第一个惊到了.....
7 回复 分享
发布于 2022-09-17 01:07 浙江
第二种其实也不太对,就算乘了10,某些较大的分子分母还是会出现重复的1/b
3 回复 分享
发布于 2022-11-11 18:44 天津
能不能问问为什么乘10就能解决了呀,所有的素数分母都是乘10就可以吗
点赞 回复 分享
发布于 2022-06-08 16:35
我就爱无脑解法
点赞 回复 分享
发布于 2023-04-16 01:54 广东
8/17出来的结果是1/5+1/5+1/17+1/85,还是重复了
点赞 回复 分享
发布于 2023-09-27 16:07 广东
我第一反应也是无脑解法hhhhh
点赞 回复 分享
发布于 08-22 21:17 上海

相关推荐

11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗? 刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
评论
45
5
分享
牛客网
牛客企业服务