试题 历届真题 杨辉三角形【第十二届】【省赛】【B组】

 思路

杨辉三角的前两行都为1,并且每一行首尾都为1,所以当输入的N=1时,直接输出位置1

然后当我们输入的N大于1

我们开始建立杨辉三角的第三行,判断N如果在第三行中,则输出位置,结束循环。这个位置的计算方法就是获取当前行数,计算 前几行的长度 还有 当前行N出现的索引位置 的和。(杨辉三角第几行就有几个值,所以我们计算第五行第三个的位置,就是(1+2+3+4) + 3,这是一个等差数列)

如果第三行没有找到,我们就要根据第三行的值计算第四行的值,然后在判断N是否存在于第四行中。我们把第三行的值赋予给a,通过循环依次取a的值计算第四行,完事后把第四行赋值给b,把a清空。当我们继续计算第五行的时候,就可以把第五行赋值给a,把b清空给第六行用。

以下代码的b列表是杨辉三角第二行的两个 亿

我们通过两个a,b列表存储杨辉三角的 当前行 和 前一行,这样依次就可以计算N所在的行

n = int(input())
a = []
b = [1,1]
while True:if n == 1:print(1)breakelse:for i in range(len(b)+1):if i == 0 or i==len(b):a.insert(i,1)else:a.insert(i,b[i-1]+b[i])b = []if n in a:m=len(a)-1m = m + m*(m-1)/2print(int(m+a.index(n)+1))breakfor i in range(len(a)+1):if i == 0 or i == len(a):b.insert(i,1)else:b.insert(i,a[i-1]+a[i])a = []if n in b:m=len(b)-1m = m + m*(m-1)/2print(int(m+b.index(n)+1))break

这个代码依旧有缺陷,在比赛网站测试它会超时,并不能计算太大的值 ,当N==2345时,运行时间是0.9394

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部