题解 | #将真分数分解为埃及分数#
将真分数分解为埃及分数
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