蓝桥杯真题 杨辉三角形 python
- 专栏
- 《蓝桥杯题目》
目录
【问题描述】
【输入格式】
【输出格式】
【样例输入】
【样例输出】
【评测用例规模与约定】
省流版本:
题目解析:
综上所述,写成代码如下所示:
【问题描述】
下面的图形是著名的杨辉三角形:
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:
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。
省流版本:
如果直接用暴力枚举的话,需要求出每一行的全部数字,然后判断每一行中是否存在该整数,思路可以,但是时间复杂度太大,只能拿30%。如果根据二项式定理,找出从哪一行开始只需要遍历前三个数,然后利用求和公式直接计算答案,就可以大大减少时间复杂度。
题目解析:
首先介绍一下杨辉三角的性质:
1、每个数等于它上方两个数的和。
2、左右对称(说明最先出现的数一定在左边)
3、第n行有n个数,前n行就有(n+1)*n/2个数
4、n+1行的数是(a+b)^n展开后各项的系数
所以,由性质4可得,第n行的m个元素为C(n-1,m-1),由于1 ≤ N ≤ 1000000000,每一行第四个数为N*(N-1)*(N-2)/6,粗略计算,当N>1900时,第四项就大于1000000000了,所以说,从第1901行开始,N若是第一次出现,只可能出现在第二第三项。
因此,在前1900层时,可以直接使用暴力枚举,在判断是否在该层,若不在前面1900层,先粗略估计N所在的层数(先计算在第三项时,因为若存在,就会先出现)int((N*2)**0.5),这时,就只需要判断三种情况:①N在该层;②N在下一层;③N在N+1层。
最后计算在第几个数上,分为三种情况:
1、在前1900层时,(c*c+c)//2+j+1 ,在c+1层的第j+1个数时(j是在列表中的下表,因此要加1)
2、在1900层之后且是第三项时,(k*(k+1))//2+3,第k+1行
3、在1900层之后且是第二项时,(N*(N+1)//2)+2,第N+1行时
综上所述,写成代码如下所示:
N=int(input())
n=[1] #第一层
c=1 #层数
if N==1:print(1)
else:#由于第1900层开始,N只会出现在第二个或第三数字上,所以1900开始,不需要求全部while c<1900:n = [1]+[n[j]+n[j+1] for j in range(len(n)-1)]+[1] #杨辉三角递推公式if N not in n[1:len(n)-1]: #判断N是否在c层上c=c+1else:break if c==1900:k=int((N*2)**0.5) #粗略计算出现的层数 #N出现在第三个数上while (k*(k-1))//2<N:k=k+1if (k*(k-1))//2==N:print((k*(k+1))//2+3)#N出现在第二个数上else:print((N*(N+1)//2)+2) # N会出现在第N+1层 #N在前1900层上时 for j in range(len(n)):if n[j]==N:print(((c*c+c)//2)+j+1) break
最后运行一下结果。。。。。
蓝桥杯真题 杨辉三角形 python相关推荐
- 扩散(蓝桥杯真题)——python解答
题目如下: 小蓝在一张 无限大 的特殊画布上作画. 这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示. 小蓝在画布上首先点了一下几个点: (0, 0) (2020, 11) (11, ...
- 三升序列(蓝桥杯真题)——python
题目如下: 对于一个字母矩阵,我们称矩阵中的一个三升序列是指在矩阵中找到三个字母,它们在同一行,同一列,或者在同一 45 度的斜线上,这三个字母从左向右看.或者从上向下看是递增的. 例如,如下矩阵中 ...
- 【思特奇杯•云上蓝桥--算法训练营】第1周作业 蓝桥杯真题(Python)
第1周作业 第一题 跑步训练 问题描述 答案提交 代码 结果 解析 第二题 阶乘约数 问题描述 答案提交 代码 结果 解析 第三题 出栈次序 问题描述 答案提交 代码 结果 第四题 哥德巴赫分解 问题 ...
- 【蓝桥杯真题】 Python题解
- python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在19351936年应邀来中国清华大学讲学。。。
python解答蓝桥杯真题2 猜年龄 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学... 问题描述 全排列模板: 美国数学家维纳(N. ...
- 【蓝桥杯真题】16天冲刺 Python
距离比赛很快了,希望和我一起准备的PY党能更加熟练的掌握Python! 1.距离和(模拟赛填空题) 问题描述: 两个字母之间的距离定义为它们在字母表中位置的距离.例如 A和 C 的距离为 2,L 和 ...
- 蓝桥杯python省赛冲刺篇2——常用算法的详细解析及对应蓝桥杯真题:打表模拟法、递推递归法、枚举法、贪心算法、差分与前缀和
注意:加了题目链接 目录 注意:加了题目链接 一.打表模拟法 介绍 1. 算式问题 题目描述 解析与代码演示 2. 求值 题目描述 解析与代码演示 3. 既约分数 题目描述 解析与代码演示 4. 天干 ...
- python解答蓝桥杯真题3 省模拟赛 计算机存储中有多少字节
python解答蓝桥杯真题3 省模拟赛 计算机存储中有多少字节 题目 问题描述 在计算机存储中,12.5MB是多少字节? 答案提交 这是一道结果填空的题,你只需要算出结果后提交即可.本题的结果为一个整 ...
- python解答蓝桥杯真题1 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。。。
python解答蓝桥杯真题1 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记... 题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月 ...
- python蓝桥杯真题 跑步锻炼
python蓝桥杯真题 跑步锻炼 题目描述 小蓝每天都锻炼身体. 正常情况下,小蓝每天跑1千米.如果某天是周一或者月初(1日),为了激励自己,小蓝要跑2千米.如果同时是周一或月初,小蓝也是跑2千米. ...
最新文章
- JavaScript之Promise实现
- COCOS学习笔记--Cocos引擎渲染流程
- ubuntu install redis/mongo
- openpyxl 插入列_[Python]Excel编程(openpyxl)学习笔记
- Android开发笔记(三十六)展示类控件
- KVM下桥接的设置(Ubuntu)
- Windows字体拯救计划(雅黑+monaco+mactype)
- Mac 锁屏防止断网、睡眠、注销登录
- DNS各地延迟排行榜
- 申请gmail邮箱及foxmail邮箱
- 美创科技出席世界信息安全大会:多维数据安全框架体系,护航新基建发展
- WIN10下 搭建golang+vscode开发环境(图文并茂,傻瓜式教程)
- ffmpeg的安装以及transform360插件的安装
- 预告|2022 星策 Summit 企业数智化转型论坛议程公布!
- Java语言制作动画
- Linux系统中systemctl命令的使用
- 硬盘的文件格式变为RAW格式
- 项目启动会发言稿(范文五)
- jabref java_一个开源的参考文献管理软件:JabRef
- apple watch和小米手表的操作逻辑对比:
热门文章
- tcp服务器测试网页版,tcp测试服务器
- Qt 车牌识别 (EasyPR)
- js实现敏感词过滤算法
- 高清 GJB-5000B,2021最新版发布,软件能力成熟度模型
- python aiml_Python:用aiml构建英语聊天机器人
- NXP恩智浦智能车四轮组-- 2.电磁检波电路、运放模块原理图
- linux设备驱动的实现与理解
- c语言屏蔽一段程序,C语言#if 0阻止代码段
- kakfa从入门到放弃(四): 分区和副本机制、高级与低级API、 kafka-eagle、原理、数据清理、限速
- 双闭环可逆直流脉宽pwm调速系统设计及matlab仿真验证_,双闭环可逆直流脉宽PWM调速系统的设计最终版(手机版)...