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

将真分数分解为埃及分数

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 上海

相关推荐

牛客279957775号:铁暗恋
点赞 评论 收藏
分享
评论
45
5
分享
牛客网
牛客企业服务