第十二届蓝桥杯 杨辉三角形 Python题解 满分

article/2025/8/27 22:35:07

原地址https://artrajz.cn/index.php/archives/32/

前言

其实道题在寒假的时候就做了,现在有机会发出来了。(〃‘▽’〃)

题目

思路

参考了大佬斜行查找的思路,为了便于观察和叙述,我把杨辉三角形如图排一下

  1 1   1 1   2   1 1   3   3   1 1   4   6   4   1 1   5  10  10   5   1 1   6  15  20  15   6   1 1   7  21  35  35  21   7   1 1   8  28  56  70  56  28   8   1 1   9  36  84 126 126  84  36   9   1 1  10  45 120 210 252 210 120  45  10   1 

从图形上看,第一列全都是1,显然没什么查询的价值,省略。。

每一行的第一个也都是1,也没什么价值,省略。。

通过观察发现,每个奇数行中间的数都是最大的,也是第一次出现的。也就是说从(1,2)开始每次坐标(+1,+2)上的数都是最早出现的,比如说2,6,20,70…

利用这个规律,我们先找到离要查找的数最近的那一列(差的绝对值最小 and 小于等于)

我们可以从2这个数的坐标(1,2)开始查找每一列最接近要查找的数的值,比如要查找21,我们先利用上面那个规律查找

首先21>2,坐标(+1,+2)来到(2,4);

21>6,坐标(+1,+2)来到(3,6);

21>20,坐标(+1,+2)来到(4,8);

21<70,不移动坐标了,锁定20这个数的坐标。

然后在20这一列(3,*)开始查找21,用二分查找的方法提高速度。突然发现在这一列中找不到21,只能将坐标往前移动一列来到15这个位置。

为什么不往后移动而是往前移动呢?是因为杨辉三角形的对称的特点,往后找虽然可能找得到,但是一定不是最早出现的。

往前移动一列后,再次利用二分查找,发现找到了21,而且这 个21的位置一定是最早出现的。

我这里用排列组合的方法求杨辉三角,就不用每次都把一个完整的杨辉三角计算出来了,最后再用坐标求位置

题解

import sys
n = int(input())
t = 1#n为1直接出结果
if n == 1:print(1)sys.exit()#先找到是哪一列比较接近
l = 0   #行
r = 0   #列
while t < n:t = 1l += 2r += 1for i in range(l-r+1,l+1):#排列组合求杨辉三角t *= ifor i in range(2,r+1):t //= i
##        print(t)if t == n:print(l*(l+1)//2+r+1)sys.exit()
else:l -= 2r -= 1t = 1#再用二分法在竖列中查找
j = l
k = n
while t != n:l = (j+k)//2t = 1for i in range(l-r+1,l+1):#排列组合求杨辉三角t *= ifor i in range(2,r+1):t //= iif j < k:   #二分查找if t > n:k = l - 1elif t < n:j = l + 1elif t == n:    #找到就退出,以免坐标错乱break;else:   #这里是该列找不到,就往前一列找r -= 1k = n
##        print(t)print(l*(l+1)//2+r+1)   #利用坐标求位置

评测结果


http://chatgpt.dhexx.cn/article/uFSEgOGm.shtml

相关文章

python杨辉三角居中_利用python打印杨辉三角

用python打印杨辉三角 介绍 杨辉三角&#xff0c;是初高中时候的一个数列&#xff0c;其核心思想就是说生成一个数列&#xff0c;该数列中的每一个元素&#xff0c;都是之前一个数列中&#xff0c;同样位置的元素和前一个元素的和。 正好在python中&#xff0c;也就是生成一…

杨辉三角形(Python)

杨辉三角形的规则就是每行的第一个数字和最后一个数字为1之外&#xff0c;其余每个数字等于上一行对应两个数字的和。 1、使用二维数组实现 def triangle(row):result []for i in range(row):if i 0: # 第一行result.append([1])elif i 1: # 第二行result.append([1,1])e…

杨辉三角Python解法

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 例&#xff1a; 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 解析&#xff1a; 大于等于2行以后&#x…

pythonfor杨辉三角,python实现杨辉三角 python实现杨辉三角的几种方法代码实例

想了解python实现杨辉三角的几种方法代码实例的相关内容吗&#xff0c;看&#xff0c;月亮在跳舞在本文为您仔细讲解python实现杨辉三角的相关知识和一些Code实例&#xff0c;欢迎阅读和指正&#xff0c;我们先划重点&#xff1a;python实现杨辉三角,python杨辉三角实现方法&am…

【完美解析】蓝桥杯 省赛 杨辉三角形 python组 找规律+二分查找+组合数

题目 看到最后如果还不懂你来打我~ 分析 我们看到杨辉三角形很容易想到一个数的值等于它肩膀两个数的和。为此&#xff0c;可以不断通过前一行的数求出后一行的数&#xff0c;重复上面操作&#xff0c;直到找到目标为止。但是看了用例规模后发现其涉及到十的九次方&#xff0…

【基础】杨辉三角python题解

题目 1231: 杨辉三角 时间限制: 1Sec 内存限制: 128MB 提交: 2261 解决: 750 题目描述 还记得中学时候学过的杨辉三角吗&#xff1f;具体的定义这里不再描述&#xff0c;你可以参考以下的图形&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 输入 输入数据包含多个…

杨辉三角形 python

class CircleQueue(object):def __init__(self,max50):# 队列最大容量self.max max# 存储队列元素的数组self.data [None for i in range(self.max)]# 队首指针self.front 0# 队尾指针self.rear 0def empty(self)::Desc判队空:return:如果队为空&#xff0c;返回True如果队…

蓝桥杯 省赛 杨辉三角形 python组(转)

# 求组合数 def C(a, b): # a为上限&#xff0c; b为下限res 1for i in range(a):res * b / a# 当结果大于目标值时无需继续运算&#xff0c;提高效率if res > target:return resb - 1a - 1return res# 二分查找目标元素 def search(k):# 起始下限&#xff0c;也就是对称轴…

蓝桥杯真题 杨辉三角形 python

专栏《蓝桥杯题目》 目录 【问题描述】 【输入格式】 【输出格式】 【样例输入】 【样例输出】 【评测用例规模与约定】 省流版本&#xff1a; 题目解析&#xff1a; 综上所述&#xff0c;写成代码如下所示&#xff1a; 【问题描述】 下面的图形是著名的杨辉三角形&#xff1a…

杨辉三角(Python)

杨辉三角性质: 每行首位数字都是1每行中间的各项数字都是它肩上两个数字的和第n行的数字有n个第n行的项数总比第n-1行多一个 解题思路: input来读取用户输入的行数。创建两个列表list1和list2,list1用于存放最后的结果(结果是二维列表),list2用于存放每一行的数字。根据性质输…

杨辉三角 Python(简单易懂)

杨辉三角&#xff08;最简单易懂&#xff09; 题目 编写两个函数&#xff0c;一个函数接收一个整数num为参数&#xff0c;生成杨辉三角形前num行数据&#xff0c;另一个函数接收生成的杨辉三角形并按以下形式输出&#xff0c;如图所示。 在图中&#xff0c;列出了杨辉三角形的…

MQ3

编者按】关于MQ&#xff0c;我以前只是有个大概概念。譬如之前&#xff0c;就是根据前端送过来的消息&#xff0c;format成后端所需要的消息格式&#xff0c;并将format后的消息放入一个Queue文件中&#xff0c;如果消息发送成功&#xff08;收到该request成功或者失败的respon…

MQ详解及四大MQ比较

一、消息中间件相关知识 1、概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能&#xff0c;成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件&#xff0c;如老牌的ActiveMQ、RabbitMQ&a…

1.MQ介绍

什么是MQ mq&#xff08;message queue&#xff09;&#xff1a;面向消息的中间件&#xff08;message-oriented middleware&#xff09;是指利用高效可靠的消息传递机制与平台无关的数据交流&#xff0c;并基于数据通信来进行分布式系统的集成。 通过提供消息传递和消息排队…

RabbitMQ管理平台与主流MQ框架

目录 1. 什么是MQ 2. 应用场景 3. 主流MQ框架 4. Docker安装部署RabbitMQ 参数说明&#xff1a; 5. RabbitMQ管理平台 6. MQ的核心概念 7. springboot整合rabbitmq 7.1.安装好rabbitmq&#xff0c;登陆RabbitMQ管理平台&#xff0c;新增管理用户并设置权限 7.2.pom.xml添…

MQ高级(四)MQ集群

一、集群分类 RabbitMQ的是基于Erlang语言编写&#xff0c;而Erlang又是一个面向并发的语言&#xff0c;天然支持集群模式。 RabbitMQ的集群有两种模式&#xff1a; &#xff08;1&#xff09;普通集群&#xff1a;是一种分布式集群&#xff0c;将队列分散到集群的各个节点&…

MQ-2烟雾传感器解析

一、工作原理 可用于家庭和工厂的气体泄漏监测装置&#xff0c;适宜于液化气、苯、烷、酒精、氢气、烟雾等的探测。故因此&#xff0c;MQ-2可以准确来说是一个多种气体探测器。MQ-2的探测范围极其的广泛。它的优点&#xff1a;灵敏度高、响应快、稳定性好、寿命长、驱动电路简…

MQ2

死信队列 什么是死信队列 一般来说&#xff0c;producer将消息投递到queue中&#xff0c;consumer从queue取出消息进行消费&#xff0c;但某些时候由于特定的原因导致queue中的某些消息无法被消费&#xff0c;这样的消息如果没有后续的处理&#xff0c;就变成了死信(Dead Lett…

MQ-2学习笔记

1.工作原理 MQ-2型烟雾传感器属于二氧化锡半导体气敏材料&#xff0c;属于表面离子式N型半导体。处于200~300摄氏度时&#xff0c;二氧化锡吸附空气中的氧&#xff0c;形成氧的负离子吸附&#xff0c;使半导体中的电子密度减少&#xff0c;从而使其电阻值增加。当与烟雾接触时…

01、RabbitMQ入门

目录 1.、什么是MQ 2、应用场景 3、主流MQ框架 4、Docker安装部署RabbitMQ 5、RabbitMQ管理平台 6、MQ的核心概念 单一生产者和单一消费者 7、springboot整合rabbitmq 执行测试方法testRabbitmq&#xff0c;控制台输出&#xff1a;receive msg : test rabbitmq messag…