蓝桥杯 杨辉三角形 python组省赛真题
题目描述
下面的图形是著名的杨辉三角形:
如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列:1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,⋯
给定一个正整数 N,请你输出数列中第一次出现 N 是在第几个数?
解答:
暴力法肯定超时,所以要减少时间复杂度,剪去不必要的即结果不会出现的区间。
一:下面第一个图,是excel表格制作的,第一部分的红色框里,是要保留的数字,另一部分就可以直接省略了,因为值(要求的值)的第一次出现的位置不会在右面那部分,所以可以省略,降低时间复杂度。
二:然后将保留的地方的值转换为第二个图,看红色的数字那部分,标为红色的数字就是保留的数字,由组合数C(列,行)的结果即为该行该列的具体数值 ,组合数的那部分计算方式被我单独摘出来放在如下博客中了,数学记不太清的可以看一下:(2条消息) 组合数 杨辉三角形前序知识点 python代码_遣隽命运的博客-CSDN博客https://blog.csdn.net/m0_67601373/article/details/124000330
四:二分查找这里就是简单的区间的下界——即C(k,2k)。区间的上界初值设为要查找的值,然后进行二分就可以了。
import os
import sys# 请在此输入您的代码
#求组合数
def C(a,b):#其实这个函数的出的结果即res为“从n个数中选择m个数,总共有多少种方案”,但通过excel表格可以看出,这个总的方案数就等于这个位置(即a,b这个位置)的值res = 1for i in range(a):res *= b/a#当结果大于目标值时无需继续运算,提高效率if res>target:return resb -= 1a -= 1return res#二分查找目标元素
def search(k):#起始下限,也就是对称轴位置的元素low = 2*k #通过前面几个数的值与其位置,可以知道“值 = C(k,2k)”,即组合数,C(列数-1,行数-1),从0开始计数#终点下限high = target#如果high<low的情况,直接判断第一个值是否为目标值即可if high<=low and C(k,low)!=target:return Falsewhile low<=high:mid = low + (high-low)//2 #二分查找的中间值ans = C(k,mid)if ans>target: #二分查找,大了就在左半区,把右边界设为mid-1high = mid-1elif ans<target: #二分查找,小了就在右半区,把左边界设为mid+1low = mid+1else:#因为下标都是从0开始的,所以该值ans处于k+1列,前面共有mid行,所以共有mid*(mid+1)/2个数(等差数列)print(int(mid*(mid+1)/2)+k+1)return Truereturn False #如果两个指针low大于high,说明没找到,返回即可target = int(input())
#因为最小值1在第0行中,所以循环要包含0行
for i in range(16,-1,-1):if search(i):break
蓝桥杯 杨辉三角形 python组省赛真题相关推荐
- 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[题目下载.2013年(第4届)~2020年(第11届)] CSDN 蓝桥杯 专栏 2013年 第04届 蓝桥杯 Java B组 省赛真题详解及小结 ...
- 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...
- 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- 2018年 第9届 蓝桥杯 Java B组 省赛真题详解及总结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...
- 2017年 第8届 蓝桥杯 Java B组 省赛真题详解及总结
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- 【蓝桥杯Web】2022年第十三届蓝桥杯Web大学组国赛真题解析
前言 省赛真题解析见: 2022年第十三届蓝桥杯Web大学组省赛真题解析(完整版) 2022年第十三届蓝桥杯Web大学组省赛真题解析(精华版) 更多蓝桥杯题解请查阅专栏:蓝桥杯 之前写省赛解析时篇幅过 ...
- 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第2场省赛 2020.10.17】
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 说明:大部分题解思路及程序代码 源自 蓝桥杯 官网视频(Java B组历年真题解析) -- 郑未老师. ...
- Java C++ 实现第十二届蓝桥杯 C++ B组 省赛真题(希望能和各位佬能一起讨论算法题:讨论群:99979568)
山水有相逢 来日皆可期 告辞 虽然是C++组的,但是和Java组的差不了两道题,大家都可以看一看 如有错误,还请佬 评论或私信指出(写的稍些急) 等后面在补充补充解题思路,在补一套C++实现(已完成, ...
- 蓝桥杯2017-Java B组省赛真题
前言 本文章只包含题目+答案,没有详细的分析过程(仅为了个人的归纳复盘使用) 题目以及讲解是看B站的视频:https://www.bilibili.com/video/BV1GE411F7Pj?p=4 ...
最新文章
- [Linux]从控制台一次读取一个字符,无需等待回车键
- 一个很好的 emacs 配置文件范例
- Cocos2d-x 生成真正的随机数
- FIFO and DMA
- [转载]详细解说STL排序(sort)------这篇博文在一道题上救了我o_0
- Android中的ClassLoader与dex文件加密实现分析
- Tomcat tomcat-users.xml详解
- JSP常用Form表单控件
- python求解重叠区域线段覆盖总长度
- 【C语言项目设计】趣味算术游戏设计
- 用美图秀秀批量修改图像尺寸分辨率大小、批量修改名字
- 歌曲:酒干倘卖无 背后的故事
- 一份完整详细的新媒体营销推广策划方案 (微信微博等)
- 智力题:13 个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球?
- 原生php写简单的聊天室
- Window10下VS2019编译 Chromium
- C#中.snk文件的作用
- 【NOI模拟赛】黑色大桥(DP优化,李超树)
- js中call 的使用, call方法的继承
- fluent物性参数拟合多项式,python,matlab多项式图像绘制