题目描述

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

如果我们按从上到下、从左到右的顺序把所有数排成一列,可以得到如下数列: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组省赛真题相关推荐

  1. 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[题目下载.2013年(第4届)~2020年(第11届)] CSDN 蓝桥杯 专栏 2013年 第04届 蓝桥杯 Java B组 省赛真题详解及小结 ...

  2. 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  3. 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  4. 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  5. 2018年 第9届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  6. 2017年 第8届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  7. 【蓝桥杯Web】2022年第十三届蓝桥杯Web大学组国赛真题解析

    前言 省赛真题解析见: 2022年第十三届蓝桥杯Web大学组省赛真题解析(完整版) 2022年第十三届蓝桥杯Web大学组省赛真题解析(精华版) 更多蓝桥杯题解请查阅专栏:蓝桥杯 之前写省赛解析时篇幅过 ...

  8. 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第2场省赛 2020.10.17】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 说明:大部分题解思路及程序代码 源自 蓝桥杯 官网视频(Java B组历年真题解析) -- 郑未老师. ...

  9. Java C++ 实现第十二届蓝桥杯 C++ B组 省赛真题(希望能和各位佬能一起讨论算法题:讨论群:99979568)

    山水有相逢 来日皆可期 告辞 虽然是C++组的,但是和Java组的差不了两道题,大家都可以看一看 如有错误,还请佬 评论或私信指出(写的稍些急) 等后面在补充补充解题思路,在补一套C++实现(已完成, ...

  10. 蓝桥杯2017-Java B组省赛真题

    前言 本文章只包含题目+答案,没有详细的分析过程(仅为了个人的归纳复盘使用) 题目以及讲解是看B站的视频:https://www.bilibili.com/video/BV1GE411F7Pj?p=4 ...

最新文章

  1. [Linux]从控制台一次读取一个字符,无需等待回车键
  2. 一个很好的 emacs 配置文件范例
  3. Cocos2d-x 生成真正的随机数
  4. FIFO and DMA
  5. [转载]详细解说STL排序(sort)------这篇博文在一道题上救了我o_0
  6. Android中的ClassLoader与dex文件加密实现分析
  7. Tomcat tomcat-users.xml详解
  8. JSP常用Form表单控件
  9. python求解重叠区域线段覆盖总长度
  10. 【C语言项目设计】趣味算术游戏设计
  11. 用美图秀秀批量修改图像尺寸分辨率大小、批量修改名字
  12. 歌曲:酒干倘卖无 背后的故事
  13. 一份完整详细的新媒体营销推广策划方案 (微信微博等)
  14. 智力题:13 个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球?
  15. 原生php写简单的聊天室
  16. Window10下VS2019编译 Chromium
  17. C#中.snk文件的作用
  18. 【NOI模拟赛】黑色大桥(DP优化,李超树)
  19. js中call 的使用, call方法的继承
  20. fluent物性参数拟合多项式,python,matlab多项式图像绘制

热门文章

  1. idea git提交代码步骤(转载)
  2. 用python设计进销存_免费的进销存系统哪个好一些?
  3. 微PE制作纯净U盘启动器及CGI安装镜像
  4. voip语音中转服务器,基于VoIP的语音应用服务器的设计与实现
  5. i3能装Linux虚拟机,使用i3wm重新安装Ubuntu
  6. OpenGL天空盒skybox
  7. 命名实体识别NER:LSTM-CRF模型
  8. Ae效果控件快速参考:3D 通道
  9. 看拉扎维《模拟CMOS集成电路设计》的一些总结和思考(七)——噪声
  10. Spark机器学习-LDA算法09