备战蓝桥杯历年试题:杨辉三角形 省赛B组 Python详解

简介: 备战蓝桥杯历年试题:杨辉三角形 省赛B组 Python详解

直接上图: 题目可以到官网的历年试题中找到

image.png


程序设计需具备以下几点知识:

1:了解杨辉三角数对称的性质 以及C(n,m)的计算方法(n下标m上标)

2:会编写组合数函数C(n,m)

3:会二分查找


 杨辉三角分析:(手写字不太好看见谅)



image.png


image.png

!继上面所说的 我们只需要从内行到外行进行遍历

下面确定遍历范围:由于数据范围1<=N<=1000000000


>>> C(32,16)

601080390

>>> C(34,17)

2333606220   所以根据上面所说的 我们只需要掌握到第16斜行即可 因为17斜行最小的元素都大于1000000000 所以不会出现N   18,19..行依次类推


所以现在的任务就是 从第16斜行遍历到第1斜行:查找N存在的位置(开始二分查找)


                                              二分查找就需要范围

如何确定:第i斜行 若首个元素(最小元素)C(2i,i)大于N

说明不会出现第i斜行 因为斜行向下递增

若若首个元素(最小元素)C(2i,i)小于N 在该斜行查找

首先 C(n,1)=n 即一定有一个符合输入的N出现在第n行(正行)


其次:斜行上的每一个数字都可以用C(2i,range)来表示


n就是我们要规划的范围 斜行元素最小时 range=i


划重点!斜行元素最大不能超过C(2i,N) 原因在于 第N正行已经存在N  它的右侧元素都大于N


所以正行再往下数就没意义了!


所以我们得到二分的区间范围range∈(i,N)(N<i则不运行)


如果在该斜行没找到就继续向上一个斜行找.....


最糟糕的情况就是找到了第2斜行 N最终还是会出现滴


N=int(input())
def C(a,b):#阶乘函数
    res=1
    i,j=a,1
    while j<=b:
        res=res*i/j
        i-=1
        j+=1
    return int(res)
def find(j,N):
    l,r=2*j,N
    while l<=r:#二分模板
        mid=(l+r)//2
        if C(mid,j)==N:
            print(int(mid*(mid+1)/2)+j+1)
            return True
        elif C(mid,j)>N:
            r=mid-1
        else:
            l=mid+1
    return False  
for i in range(16,-1,-1):
    if find(i,N):
        break


指出:代码中int(mid*(mid+1)/2)+j+1不可以改成 int(mid*(mid+1)/2+j+1) 涉及到精度问题 详见(否则将只有80分)

关于Python精度问题

https://ask.csdn.net/questions/7637793?weChatOA=weChatOA1


如果还有哪里没有讲清楚的欢迎评论留言 这道题还是一道思维题


                                              新年快乐 不忘为算法奋斗!加油


目录
相关文章
|
4月前
|
Python
蓝桥杯练习题(一):Python组之入门训练题
这篇文章是关于蓝桥杯Python组的入门训练题,包括Fibonacci数列、圆的面积、序列求和和A+B问题的具体代码实现和样例输出。
168 0
|
2月前
|
存储 算法 Python
Python-打印杨辉三角(进阶版)
本文介绍了如何使用Python打印杨辉三角的进阶方法,包括数学原理理解、列表存储数据、算法设计及输出格式控制。通过逐步解析,展示了如何实现用户自定义阶数的对称杨辉三角,并优化输出格式,使结果更加美观。适合编程初学者学习参考。
|
2月前
|
存储 索引 Python
Python-打印杨辉三角
本文介绍了使用Python打印杨辉三角的方法,涵盖列表使用、循环控制和数学运算等关键知识点。通过具体步骤和代码示例,详细讲解了生成杨辉三角的过程,适合初学者学习参考。
|
4月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
150 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
4月前
|
人工智能 Python
蓝桥杯练习题(四):Python组之历届试题三十题
关于蓝桥杯Python组历届试题的三十个练习题的总结,包括题目描述、输入输出格式、样例输入输出以及部分题目的解题思路和代码实现。
72 0
蓝桥杯练习题(四):Python组之历届试题三十题
|
4月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(二):Python组之基础练习三十题
蓝桥杯Python编程练习题的集合,包含了三十个不同难度的编程题目,覆盖了基础语法、数据结构和算法等领域。
72 0
|
人工智能 Python
Python 蓝桥杯 动态规划 2道例题+配套1道历年真题
Python 蓝桥杯 动态规划 2道例题+配套1道历年真题
137 0
Python 蓝桥杯 动态规划 2道例题+配套1道历年真题
|
存储 索引 Python
Python蓝桥杯真题——砝码称重
Python蓝桥杯真题——砝码称重
433 0
|
2月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
2月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。