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

💖作者简介:大家好,我是车神哥,府学路18号的车神🥇
⚡About—>车神:从寝室实验室快3分钟,最慢3分半(那半分钟其实是等绿
📝个人主页:车手只需要车和手,压力来自论文_府学路18号车神_CSDN博客
🥇 官方认证:人工智能领域优质创作者
🎉点赞评论收藏 == 养成习惯一键三连)😋

⚡希望大家多多支持🤗~一起加油 😁


每天刷一道题,话不多说,先刷近两年的题吧,从2020的开始,如果有一起的可以加入我们!!!

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


扫码 我的主页 网页左边 群二维码

加入方式:可以在下方的微信名片加我,然后拉你入群。(记得备注暗号我要拿国奖


2020年第十一届蓝桥杯赛题总览

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

数字三角形(题目)

(本题总分:10分)

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


—>【问题描述】


上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。

路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。

—>【输入描述】

输入的第一行包含一个整数 N ( 1 ≤ N ≤ 100 ) N(1\le N \le 100) N(1N100),表示三角形的行数。

下面的 N N N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。

—>【输出描述】

输出一个整数,表示答案。

—>【输入输出样例】

输入:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

输出:
27


解析


通过阅读题干,本题——难度一般:⭐⭐

考察类型:动态规划、遍历

考察知识点:map(),max()


分析:

直接遍历吧!
从题干来看,输入第一行为一个整数N,代表一共有多少行。从三角形的结构可知,从上到下,依次加一,五行也就是,1,2,3, 4,5个数分别各行。数字为(0~100)之间的整数。
往下走的条件为:向左下走的次数和右下走的次数相差不能超过1.比如示例的走法如下:
在这里插入图片描述

此上图来看,红色的路径走法结果为:27

下面直接开干!!!


代码

Python代码实现:

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

n = int(input("输入三角形的行数:"))

in_set = [list(map(int, input("输入每行的数:").split())) for i in range(n)]       # [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]]
print(in_set)
# insert
# 循环遍历计算每行的和最大值
for i in range(1, n):      # i代表遍历的行,外层
    for j in range(0, i+1):     # 内层循环,遍历每一层中数字
        if j == 0:          # 判断最左边的数字,只能由右上方得到
            in_set[i][j] += in_set[i-1][j]
        elif j == i:        # 判断最右边的数字只能由左上方得到
            in_set[i][j] += in_set[i-1][j-1]
        else:               # 排除玩左右两边的,现在只剩下中间的了
            in_set[i][j] += max(in_set[i-1][j-1:j+1])
# 当遍历计算完成数值后,设置判断输出
if n & 1:   #判断如果行数N为奇数,则返回中间值
    print(in_set[-1][n//2])     # 平板除//
else:
    print(max(in_set[-1][n//2], in_set[-1][(n//2)-1]))  #相反,n为偶数的时候,则返回中间数值最大的一个

示例1:
在这里插入图片描述

其实还可以用dp动态规划来实现,由于理解和普适性,还是用遍历判断可能通俗易懂一些,加油!

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


今天开刷第 天,难度中等,欢迎大家加入,一起变强,一起自律,一起上国赛!!!

今天的题目一般哈,有不同解法的可以在下面留言哦!~

往期刷题路线:

刷题路线Detail
Day-01门牌制作
Day-02寻找2020
Day-03跑步锻炼
Day-04蛇形填数
Day-05排序
Day-06装饰珠
Day-07成绩统计
Day-08单词分析

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


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

⚡⚡


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

ღ( ´・ᴗ・` )

  • 7
    点赞
  • 5
    收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:酷酷鲨 设计师:CSDN官方博客 返回首页
评论 7

打赏作者

府学路18号车神

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值