思路
杨辉三角的前两行都为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)
break
else:
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)-1
m = m + m*(m-1)/2
print(int(m+a.index(n)+1))
break
for 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)-1
m = m + m*(m-1)/2
print(int(m+b.index(n)+1))
break
这个代码依旧有缺陷,在比赛网站测试它会超时,并不能计算太大的值 ,当N==2345时,运行时间是0.9394