【每日一题】备战冲击蓝桥杯国赛——Python程序设计 | Day17 | 杨辉三角 | 真题代码解析

举报
府学路18号车神 发表于 2022/04/11 15:14:40 2022/04/11
【摘要】 每天刷一道题,话不多说,先刷近两年的题吧,现在是2021年的真题了,如果有一起的可以加入我们!!!一起来刷题,冲击国赛!!! 2021年第十二届蓝桥杯赛题总览2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题! 杨辉三角 (题目)(本题总分:15分)官方练习系统:https://www.lanqiao.cn/problems/1462/learnin...

每天刷一道题,话不多说,先刷近两年的题吧,现在是2021年的真题了,如果有一起的可以加入我们!!!

一起来刷题,冲击国赛!!!


2021年第十二届蓝桥杯赛题总览

2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题!
在这里插入图片描述

杨辉三角 (题目)

(本题总分:15分)

官方练习系统:https://www.lanqiao.cn/problems/1462/learning/


—>【问题描述】

在这里插入图片描述
在这里插入图片描述


解析


通过阅读题干,本题——难度中等:⭐⭐⭐

考察类型:数论、递归

考察知识点:递归


分析:

杨辉三角是个老题目了。

特性:

  1. 对称性
    杨辉三角形左右两边数字对称相等。

  2. 渐增性
    越往中间数字越大,除最外层1外,越往下数字越大。

  3. 组合数
    杨辉三角形里面的每一个元素都能用组合数表示。第N行的第M列可以表示成C(N-1,M-1),如6在第5行的第3列,它对应的组合数就是C(5-1,3-1),即C(4,2)。

要找出第一次N出现的位置,根据对称性可知,N出现的位置必定在左边,因此只考虑左半边位置即可。因为越靠中间的数越大,所以我们可以从最中间的数,也就是从对称轴位置的数开始找。怎么找呢?斜着找。没错,就是斜着找。

下面直接开干!!!


代码

Python代码实现:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/3/11 16:04
# @Author  : 府学路18号车神
# @Email   :yurz_control@163.com
# @File    : Day17.py

def C(x, y):  # 计算x行y列(都是从0开始数)位置的数
    z = 1
    res1 = 1
    res2 = 1
    while (z <= y):
        res1 *= x
        res2 *= z
        x -= 1
        z += 1
    return res1 // res2


n = int(input())
i = 0
flag = -1
while (i < 50000 and flag == -1):  # 50000行第三个数已经大于了1000000000
    for j in range(0, i + 1):
        if (C(i, j) > n):  # 在遍历一行时,如果已经大于n了就跳过该行遍历
            break
        if (C(i, j) == n):
            flag = j
            break
    i += 1
# flag为-1时说明前50000行没找到该数,又因为第50000行的第三个数已经大于了1000000000
# 所以下面每一行的第三个数往后都大于1000000000,也就是说,如果前50000行没有找到这个数,
# 那么这个数一定会在下面行的第二个数的位置被找到,而每一行的第二个数逐行增一,
# 即数n的位置就是(n+1)*n//2+2
if (flag == -1):
    print(int((n + 1) * n // 2 + 2))  # 前50000行没找到,则必定在第二列,直接找规律算位置
else:
    print(int((i - 1) * i / 2 + flag + 1))  # 前50000行找到了,根据i和flag带回的j值计算出位置

在这里插入图片描述

由此,我们可以快速得出结果,验证完毕!


今天开刷第 十七 天,欢迎大家加入,一起变强,一起自律,一起上国赛!!!

有不同解法的可以在下面留言哦!~

往期刷题路线:

刷题路线 Detail
2020年
Day-01 门牌制作
Day-02 寻找2020
Day-03 跑步锻炼
Day-04 蛇形填数
Day-05 排序
Day-06 装饰珠
Day-07 成绩统计
Day-08 单词分析
Day-09 数字三角形
Day-10 平面切分
2021年
Day-11 卡片
Day-12 直线
Day-13 货物摆放
Day-14 路径
Day-15 回路计数
Day-16 时间显示

官方刷题练习系统:http://lx.lanqiao.cn/


❤坚持读Paper,坚持做笔记,坚持学习,坚持刷力扣LeetCode❤!!!
坚持刷题!!!冲击国赛
To Be No.1

⚡⚡


创作不易⚡,过路能❤关注收藏点个赞三连就最好不过了

ღ( ´・ᴗ・` )

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。