一、题目
二、示例
三、代码
while True:
try:
fenzi,fenmu = map(int, input().split('/'))
s = ''
for i in range(fenzi):
s += '+' + '1' + '/' + str(fenmu)
print(s[1:])
except:
break
while True:
try:
result = []
fenzi, fenmu = map(int, input().split('/'))
while True:
p = int(fenmu / fenzi)
r = int(fenmu % fenzi)
if fenzi == 1:
result.append('1' + '/' + str(fenmu))
break
elif r == 0 and fenzi > 1:
result.append('1' + '/' + str(p))
break
else:
result.append('1' + '/' + str(p + 1))
fenzi = fenzi - r
fenmu = fenmu * (p + 1)
print('+'.join(result))
except:
break
四、算法说明
-
代码1,属于投机取巧,将8/11=1/11+1/11+1/11+1/11+1/11+1/11+1/11+1/11 ,对于一个分数a/b ,表示方法有很多种,有一种是最优的表示方法:加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。 -
代码2,借助公式: 具体算法如下: 设某个真分数a/b ,把b 除以a 的商p 部分加1 后的值作为埃及分数的其中一个分母p+1 ; 如果a 大于1 且能整除b ,则最后一个分母为b/a ,算法结束; 如果a 等于1 ,则最后一个分母为b ,算法结束; 否则将a-a%b ,作为新的a ,将b 乘以p+1 ,得到新的b ,继续循环算法。
胡萝卜
2022年3月1日21:41:28
我不知道将去向何方,但我已在路上! |
---|
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |
|