【天梯】L1-009 N个数求和 (20 point(s))

这道题做了挺久,仔细检查后才发现是自己代码表达不清楚,没有把自己的想法写下来。
错误: 我是要把前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))    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值