蓝桥杯真题 杨辉三角形 python

2023-11-17

目录

        【问题描述】

        【输入格式】

        【输出格式】

        【样例输入】

        【样例输出】

        【评测用例规模与约定】

          省流版本:

          题目解析:

          综上所述,写成代码如下所示:


【问题描述】

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

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

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+1
        else:
            break         
    if c==1900:
        k=int((N*2)**0.5)  #粗略计算出现的层数 
        #N出现在第三个数上
        while (k*(k-1))//2<N:
            k=k+1
        if (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

最后运行一下结果。。。。。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Z2g5bCYOTgx,size_20,color_FFFFFF,t_70,g_se,x_16

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯真题 杨辉三角形 python 的相关文章

随机推荐

  • 基于信号量的生产者-消费者

    信号量是进化版的互斥锁 互斥锁只能供一个线程使用 信号量可以供多个线程使用 如果希望在多个线程之间对某对象的部分数据共享 互斥锁无法实现 只能将整个数据锁住 这样导致线程并发性下降 信号量既能保持同步 数据又不混乱 又能提高线程并发 主要函
  • Qt

    Qt 信号和槽之间的连接与使用 重载信号和槽的连接 测试环境 Qt Creator 5 14 2 MinGW 7 3 1 信号和槽 在Qt中 QObject是所有的Qt类的基类 如果想要自己实现一个C 类 并且还需要支持信号和槽 那么需要在
  • 用java计算输入工资计算税收_标准作业

    课后作业 第一章 理论 1 java环境搭建的步骤 2 java语言的简介 3 手写代码实现个人信息的输出 姓名 性别 年龄 家庭地址 爱好 座右铭 上机 分别使用记事本和myeclipse编写java程序实现求学经历的输出并写好每行代码的
  • 医学图像的CT值与像素值总结及转换代码

    目录 一 CT图像的调窗 1 Window width 2 Window level center 二 DICOM文件中窗宽窗位对应字段 三 CT值与像素值转换 线性映射 1 itk snap软件和sitk代码示例 2 Mango软件和ni
  • 协议定制 + Json序列化反序列化

    文章目录 协议定制 Json序列化反序列化 1 再谈 协议 1 1 结构化数据 1 2 序列化和反序列化 2 网络版计算器 2 1 服务端 2 2 协议定制 1 网络发送和读取的正确理解 2 协议定制的问题 2 3 客户端 2 4 代码 3
  • Spring Boot + Vue的网上商城之基于用户的协同过滤的商品推荐实现

    Spring Boot Vue的网上商城之基于协同过滤的商品推荐实现 协同过滤算法设计思路 构建用户 商品评分矩阵 将用户的购买行为和评价记录转化为一个用户 商品评分矩阵 矩阵中的每个元素表示用户对商品的评分 计算用户之间的相似度 通过计算
  • 在Visual Studio上开启自己的C++学习之旅

    目录 0 引言 1 本教程使用到的相关软件或产品 2 下载及安装Visual Studio 2 1 创建符号链接 2 2 安装Visual Studio 2 2 1 补充 3 创建并运行自己的第一个C 程序 0 引言 在学习一门编程语言之前
  • [940]TensorFlow练习4: CNN, Convolutional Neural Networks

    Convolutional Neural Networks翻译为卷积神经网络 常用在图像识别和语音分析等领域 CNN详细介绍参看 https en wikipedia org wiki Convolutional neural networ
  • 太原理工大学c语言期末试卷及答案,太原理工大学人工智能复习题 试题 答案概要...

    任务有何不同 6 5 基于规则的专家系统是如何工作的 其结构为何 6 6 基于框架的专家系统与面向目标编程有何关系 其结构有何特点 其设计任务是什 么 6 7 为什么要提出基于模型的专家系统 试述神经网络专家系统的一般结构 6 8 新型专家
  • 在区块链的世界里,美国CFTC希望成为一个节点

    在华盛顿参与一场区块链峰会时 CFTC 美国商品期货交易委员会 主席J Christopher Giancarlo发表了题为 数字三要素 技术 监管和市场 的演讲 Giancarlo在演讲中提到了区块链技术的应用可能 认为如果2008年经济
  • Component name “Nearby“ should always be multi-word. 的原因

    很好奇在ESlint规范中为啥要求component的name不能是单个单词 除了App外 呢 查阅官方文档得知 This rule require component names to be always multi word excep
  • spring控制反转与依赖注入

    1 什么是控制反转 传统的编程思路是 当我需要某个对象时 我便自己去实例化调用它 而控制反转则是 当我需要某个对象时 自然有人帮我们实例化它 简单的来说 这是一种衣来张口 饭来伸手式的控制模式 这也符合spring最根本的使命 简化java
  • 基于Java开发一套完整的区块链系统

    一 区块链技术理论基础 1 基本概念 1 区块链 从技术层面来看 区块链是由包含交易信息的区块按照时间顺序从后向前有序链接起来的数据结构 从应用层面来说 区块链是一个分布式的共享账本和数据库 具有去中心化 不可篡改 全程留痕 集体维护 公开
  • 删除计算机用户时拒绝访问权限,c盘为什么拒绝访问 删除c盘文件需要管理员权限怎么办...

    c盘是电脑中的关键位置 存储着很多系统重要文件 如果电脑出问题一般就是c盘中的文件异常 近日有小伙伴出现这样一个问题 打不开c盘显示拒绝访问 作为计算机的主人被无法访问 这种问题该怎么解决呢 其实很简单 只要找准方向就可以迎刃而解 下面小编
  • 8月热门论文丨AI Agent会是大模型的未来发展方向吗?

    过去的8月 如果让我用一个词来总结 那就是 Agent 大模型的下半场已经拉开序幕 大厂们都纷纷表态入局 Agent OpenAI创始成员Andrej Karpathy表示相比大模型 OpenAI内部目前已经关注Agent领域 亚马逊也宣布
  • 13:js逆向-登录加密(aes加密)

    post请求 请求头信息被加密 response返回数据被加密 1 首先搞请求头data加密 还是直接搜索 搞定加密的参数 f body loginMethod 1 name 17756236589 password 132456789 h
  • wpf解决方案

    Wpf部分 1wpf textbox 显示和隐藏 personq Visibility Visibility Visible 这样显示 personq Visibility Visibility Hidden 这样隐藏 2 wpfradio
  • Linux笔记之安装配置nginx的两种方式——yum安装和源码安装

    安装配置nginx的两种方式 yum安装和源码安装 访问nginx的官方网站 http www nginx org Nginx版本类型 Mainline version 主线版 即开发版 Stable version 最新稳定版 生产环境上
  • Cannot run program “D:\jdk8\bin\java.exe“ (in directory “C:\Users\Administrator\AppData\Local\JetBra

    bug笔记 项目场景 运行main方法 Cannot run program D jdk8 bin java exe in directory C Users Administrator AppData Local JetBrains In
  • 蓝桥杯真题 杨辉三角形 python

    专栏 蓝桥杯题目 目录 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 省流版本 题目解析 综上所述 写成代码如下所示 问题描述 下面的图形是著名的杨辉三角形 如果我们按从上到下 从左到右的顺序把所有数排成一列 可以得