这道题做了挺久,仔细检查后才发现是自己代码表达不清楚,没有把自己的想法写下来。
错误: 我是要把前n个通分后与第n个通分记录此时的分子和分母,但是我写的时候每次通分都是除以它对应的分母,但其实应该是除以此时的最小公倍数。
于是就转换思路用数组存储了。也算是用动态规划的思想(?)
import math
n=int(input())
num=list(map(int,input().replace('/',' ').split()))
res=[0]*n
res[0]=num[0]
gcd=[0]*n
gcd[0]=num[1]
for i in range(1,2*n-2,2):
gcd[(i+1)//2]=int(gcd[(i-1)//2]*num[i+2]/math.gcd(gcd[(i-1)//2],num[i+2]))
res[(i+1)//2]=int(res[(i-1)//2]*(gcd[(i+1)//2]/gcd[(i-1)//2])+num[i+1]*(gcd[(i+1)//2]/num[i+2]))
g=math.gcd(res[-1],gcd[-1])
fenzi=res[-1]//g
fenmu=gcd[-1]//g
if (abs(fenzi/fenmu)<1 and fenzi!=0):
print(str(fenzi)+"/"+str(fenmu))
elif (fenzi%fenmu==0):
print(str(fenzi//fenmu))
else:
print(str(int(fenzi/fenmu))+" "+str(fenzi-int(fenzi/fenmu)*fenmu)+"/"+str(fenmu))