第十二届蓝桥杯 Python组 试题 G: 杨辉三角形

第十二届蓝桥杯 Python组 试题 G: 杨辉三角形

  大家好,我叫亓官劼(qí guān jié ),在GitHub & CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在GitHub & CSDN中写博客,唯一博客更新的地址为:亓官劼的博客 ,近期将逐渐同步刷题相关记录到GitHub:Algorithmic-learning-records,大多是本人的刷题记录,如果转载请附上原文地址,谢谢。


由于学习工作的需要,算法刷题将会逐渐由C++向Python3过度,正在过度中,如实现的不太优美,请见谅。

本文原创为亓官劼,请大家支持原创,部分平台一直在恶意盗取博主的文章!!!
若需联系博主,可以联系本人微信:qiguanjie2015


时间限制: 5.0s 内存限制: 512.0MB

本题总分:20 分

【问题描述】

下面的图形是著名的杨辉三角形:

如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:

1, 1, 1, 1, 2, 1, 1, 3, 3, 1, 1, 4, 6, 4, 1, …

给定一个正整数 N,请你输出数列中第一次出现 N 是在第几个数?

【输入格式】

输入一个整数 N

【输出格式】

输出一个整数代表答案。

【样例输入】

6

【样例输出】

13

【评测用例规模与约定】

对于 20% 的评测用例,1 ≤ N ≤ 10;

对于所有评测用例,1 ≤ N ≤ 1000000000。

解题思路

递归,这里只需要保留当行的数值,就可以推出下一行,为了方便计算,可以在两边加0.当数量级到10^10时,当行的数也就100个不到,不会存在内存压力。

算法实现

n = int(input())
if n == 1:
    print("1")
else:
    a = [0,1,0]
    index = 1
    flag = True
    while flag:
        i = 1
        tmp = []
        while i < len(a):
            t = a[i]+a[i-1]
            tmp.append(t)
            index += 1
            if n == t:
                print(index)
                flag = False
                break
            i += 1
        tmp.insert(0,0)
        tmp.append(0)
        a = tmp

你可能感兴趣的:(蓝桥杯)