一、题目

二、示例

三、代码
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
| 我不知道将去向何方,但我已在路上! |
|---|
| 时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |
|