病毒繁殖-第12届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第52讲。

病毒繁殖,本题是2021年3月27日举办的第12届蓝桥杯青少组Python编程选拔赛真题,题目要求编程求解在第N分钟时,病毒粒子的总数量。

先来看看题目的要求吧。

一.题目说明

提示信息:

某种病毒具有很强的繁殖能力,从病毒粒子出生后的第5分钟开始,每分钟可以复制出一个新的病毒粒子。新出生的病毒粒子从第5分钟开始,也可以每分钟复制一个新的病毒粒子。

举例来说,第1分钟时有一个病毒粒子,此病毒粒子从第5分钟开始复制新的病毒粒子,因此第5分钟时的病毒数量为2个;第6分钟时又复制出新的病毒粒子,因此第6分钟的病毒数量为3个;以此类推,第7分钟时病毒粒子数为4;第8分钟时病毒粒子数为5;第9分钟时,第5分钟复制出的病毒粒子开始复制新的病毒粒子,因此第9分钟时的病毒总数为7;第10分钟时,第6分钟复制出的病毒粒子开始复制新的病毒粒子,因此第10分钟时的病毒粒子总数为10。

编程实现:

计算病毒粒子总数,已知第一分钟时出生了一个病毒粒子,假设所有病毒粒子不会自动死亡,请计算第N分钟时的病毒粒子总数。

例如:前10分钟病毒粒子的总数分别为1,1,1,1,2,3,4,5,7,10。

输入描述:

输入正整数 N(0 < N ≤ 60),表示时间

输出描述:

输出第N分钟时,病毒粒子的总数

样例输入:

6

样例输出:

3

二.思路分析

这是一道算法题,考查的算法有递归和递推,涉及的知识点包括循环、条件、列表和函数等。

看到这个题目所描述的场景,你会想到什么呢?

对了,就是斐波那契数列,也叫兔子数列。13世纪意大利数学家斐波那契的《算盘书》中记载了典型的兔子产仔问题。

图片

其大意如下:

如果一对两个月大的兔子以后每一个月都可以生一对小兔子,而一对新生的兔子出生两个月后才可以生小兔子。也就是说,1月份出生,3月份才可产仔。那么假定一年内没有产生兔子死亡事件,那么1年后共有多少对兔子呢?

斐波那契数列是一个非常经典的算法编程题目,有多种实现方法,比如递归和递推等。

不管是使用哪种算法,其关键在于要确定递推公式,比如斐波那契数列的递推公式是这样的:

图片

那本题描述的病毒繁殖,递推公式又是怎样呢?

对于这类问题,我们用f(n)来表示问题的解,通常有如下两种推导方式:

1). 正向推导,利用已知数列找规律;

2). 逆向推导,分析f(n)和f(n-1)之间的关系;

我们先用正向推导方法,题目给出了一个例子,前10分钟病毒粒子的总数分别为:

1,1,1,1,2,3,4,5,7,10

由于新出生的病毒粒子从第5分钟开始复制,说明前面4分钟的病毒例子都只有1个,即:

f(1) = f(2) = f(3) = f(4) = 1

第5分钟,开始复制一个例子,于是就得到了两个病毒粒子:

f(5) = f(4) + f(1) = 1 + 1 = 2

第6分钟呢,它是在第5分钟的基础上,又增加了一个,增加的一个是第1个病毒粒子复制出来的:

f(6) = f(5) + f(2) = 2 + 1 = 3

以此类推,可以分别计算出第7、8、9分钟的病毒数量:

f(7) = f(6) + f(3) = 3 + 1 = 4f(8) = f(7) + f(4) = 4 + 1 = 5

到第9分钟时,第5分钟复制出来的第2个病毒粒子也开始复制了,也就是说有两个病毒粒子在复制,要增加2个,其病毒数量计算如下:

f(9) = f(8) + f(5) = 5 + 2 = 7

第10分钟时,病毒数量计算如下:

f(10) = f(9) + f(6) = 7 + 3 = 10

因此,我们可以得到如下递推公式:

图片

接下来,我们使用逆序推导的方式,此时我们只需要考虑f(n)和f(n-1)之间的关系。

为了方便描述,我们引入两个概念,存量和增量。

图片

所谓存量,是指原来就有的,比如要计算第n分钟的病毒数量f(n),存量就是第n-1分钟的病毒数量f(n - 1)。

所谓增量,是指新增的部分,对于本题而言,就是新复制出来的病毒,那么新复制出来多少呢?

此时,我们只需要明白一点,新出生的病毒粒子从第5分钟才开始复制,可以理解为病毒有4分钟的生长期。

也就是说,在第n分钟时,只有第n - 4分钟的那些病毒粒子才可以复制病毒粒子,所以增量就是f(n - 4)。

两者相加,就是第n分钟的病毒粒子数,如下:

f(n) = f(n - 1) + f(n - 4)

同时,我们还要考虑边界情况,要确保n - 1和 n - 4都大于0,所以n < 5时,需要单独处理。可以理解为前4分钟,病毒粒子还不具备繁殖能力,不能使用这个推导公式来推导。

有了推导公式,问题就变简单了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们使用两种方法来编写程序:

  • 递归算法

  • 递推算法

1. 递归算法

根据前面的思路分析,先定义递归函数,然后调用即可,代码如下:

图片

代码比较简单,说明两点:

1). 为了完整性,这里增加了 <= 0的判断,实际上本题中的N是大于0的,所以不写也是可以的;

2). return不仅可以返回结果,还可以直接结束程序,所以只需要使用if语句就行,代码更简洁。

但是,考虑到N的范围是0~60,随着N的增加,时间复杂度急剧增加,所以会存在超时情况。

可以考虑使用带备忘录的递归算法,代码改进如下:

图片

说明如下:

1). 需要借助一个列表,用来保存f(n)的值,其长度为n+1,默认值都是0;

2). 在定义函数的时候,尽量不要依赖外部变量,所以这里将memo列表作为参数进行传递。

2. 递推算法

递归问题,通常都可以改用递推算法来实现。为了方便,我们可以定义一个列表来保存每一分钟的病毒数量。

对应的代码如下:

图片

代码不多,强调2点:

1). 为了方便,这里借用了列表arr,下标i对应的就是第i分钟,所以第一项表示第0分钟,设置为0;

2). 需要分情况讨论,当n < 5时,只需将第1~n项都设置为1,当n >= 5时,先将第1~4项设置为1,然后再利用递推公式计算第5~n项。

当输入n = 10的时候,arr数组如下:

图片

因此,我们只需要输出arr[10]即可。

至此,整个程序就全部完成了,你也可以输入不同的数字来测试效果。

四.总结与思考

本题代码在12行左右,涉及到的知识点包括:

  • 循环语句,主要for...in循环;

  • 条件语句,包括单分支和双分支;

  • 列表的使用;

  • 函数的定义及使用;

  • 递归算法;

  • 递归算法;

本题作为stema测评的最后一题,难度不小。这里的关键点在于如何找到推导公式,并选择相应的算法来实现。

在探寻推导公式的时候,我们使用了两种策略,一是正向推导,二是逆向推导。

实际上,正向推导就是归纳法,其核心思想是从特殊到一般的推理过程,通过对众多的事物特例进行观察和综合,以发现一般规律的推理方法。

而逆序推导就是演绎法,它是一种从普遍性的前提出发,通过逻辑推理得出个别或特殊结论的方法。它基于已知的一般原则或假设,推导出具体的结论,确保如果前提为真,则结论也必然为真。

这是两种非常重要的思维方式,也是我们认识、理解和探索这个世界的基本方法。

二者各有其特点和适用范围,归纳法有助于我们发现新知识和规律,而演绎法则确保从已知前提中得出必然结论。在实际应用中,两种方法常常相互补充,共同推动人类知识的积累和发展。

学习编程不仅仅是学习编程知识,更重要的是培养孩子的思维,包括逻辑思维、数学思维和计算思维。

归纳法和演绎法是逻辑思维的两种具体体现,这两种思维的培养和提升,对于提高我们的逻辑思考能力和问题解决能力至关重要。在平时的学习过程中,要有意识地加强这些思维的训练和提升。

超平老师给你留一道思考题,在上面的递推算法中,我们借助了一个列表用于保存第n分钟的病毒数量,如果不使用数组,是否可以,又该如何实现呢?

你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要源码的,可以移步至“超平的编程课”gzh。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/545459.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BLE一些概念 (转载)

原文见 https://www.cnblogs.com/wahahahehehe/p/15094324.html 1. 物理信道 低功耗蓝牙的工作频段为2.4GHz&#xff0c;这个唯一一个在所有国家都无需授权的频段。 BLE将2.4GHz频段分为40个RF射频信道&#xff0c;每个信道2M宽度&#xff0c;最低的中心频率为2402MHz&#x…

水库之大坝安全监测系统解决方案

一、系统介绍 水库之大坝安全监测系统主要包括渗流监测系统、流量监测系统、雨量监测系统、沉降监测系统组成。每一个监测系统由监测仪器及自动化数据采集装置&#xff08;内置通信装置、防雷设备&#xff09;、附件&#xff08;电缆、通信线路、电源线路&#xff09;等组成&a…

为什么每个程序员都应经历一次软考?

今天想和大家讨论一个问题&#xff0c;为什么每个程序员都应经历一次软考&#xff1f; 软考是最近几年比较热门的一个国家级考试&#xff0c;但其实80%的人都只是去凑热闹&#xff0c;是去为国家软考办做贡献的。 有因为各种各样的原因直接缺考的&#xff0c;有是为了一些学习以…

java 将 json 数据转为 java 中的对象

一、准备 json 数据 {"name": "mike","age": 17,"gender": 1,"subject": ["math","english"] }二、对应的java对象 package com.demo.controller;import lombok.Data; import java.util.List;Data pu…

若依 ruoyi-vue el-select 多选框 全选 反选 全不选 查询功能

参考文章vueel-select下拉实现&#xff1a;全选、反选、清空功能 如图&#xff0c;优化代码&#xff0c;支持若依字典 import multipleSelect from /components/MultipleSelect/index.vuecomponents: { multipleSelect },<el-row><el-form-item label"分管领域…

ETL中如何运用好MQ消息集成

一、ETL的主要作用 ETL&#xff08;Extract, Transform, Load&#xff09;是数据仓库中的关键环节&#xff0c;其主要作用是将数据从源系统中抽取出来&#xff0c;经过转换和清洗后加载到数据仓库中。具体而言&#xff1a; Extract&#xff08;抽取&#xff09;&#xff1a;从…

python爬虫 - 爬取图片

文章目录 1、爬取图片示例1&#xff1a;使用 .urlretrieve() 函数2、爬取图片示例2 - 使用 open/write 函数3、爬取图片示例33.1 使用 open/write 下载3.2 使用 urlretrieve下载 爬虫的本质&#xff1a;模拟对应的App&#xff0c;浏览器访问对应的地址获取到数据 1、爬取图片示…

【Linux】 OpenSSH_7.4p1 升级到 OpenSSH_9.6p1(亲测无问题,建议收藏)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

centos 6设置yum源遇到的问题

由于centos6已经不被支持了&#xff0c;直接抄人家的命令是不行的 比如执行这些&#xff08;是wget或者是curl按照自己的改&#xff09; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo yum makecache会报错 需要到对应的镜像源网…

Base64编码方式简介

从二进制转为字符的一种编码。每个base64字符表示长度为6个比特的二进制数据&#xff0c;因此可以推得每3个字节&#xff08;24比特&#xff09;可以由4个base64字符组成。base64字符编码表如下&#xff1a; 因此需要注意的是&#xff0c;当二进制文件长度不是3的倍数的时候&a…

OSCP靶场--RPC1

OSCP靶场–RPC1 考点 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.227.236 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-14 22:21 EDT Nmap scan report for 192.168.227.236 Host is up (0.14s latency). …

20V/200mA高PSRR低噪声高性能车规级稳压器

概述 PCD3900 是一款高性能低压差线性稳压电源&#xff0c;其采用的超低噪声和超高电源抑制比&#xff08;PSRR&#xff09;架构对噪声敏感的信号采集和无线通信应用供电。 PCD3900 被设计为一个高性能电流基准后跟随一个高性能电压缓冲器&#xff0c;其可容易地通过并联以进一…

MySQL之锁详细总结

介绍 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用外&#xff0c;数据也是一种供多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&…

如何在Windows使用固定公网地址SSH远程访问本地Archcraft系统

文章目录 1. 本地SSH连接测试2. Archcraft安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接小结 5. 固定SSH公网地址6. SSH固定地址连接 Archcraft是一个基于Arch Linux的Linux发行版&#xff0c;它使用最简主义的窗口管理器而不是功能齐全的桌面环境来提供图形化用户界面。 C…

MOM系统:制造企业的“神级助手“!

一、大环境下的智能化改造 嘿&#xff0c;亲爱的制造企业老板们&#xff0c;你们是否曾经为生产计划混乱、物料和设备管理无序、产品质量不稳定等等问题而头疼不已&#xff1f;现在&#xff0c;有一个超级助手可以帮助你们解决这些问题&#xff0c;那就是MOM系统&#xff01;什…

QT、ffmpeg视频监控分屏

1、支持分屏&#xff08;4&#xff0c;6&#xff0c;8&#xff0c;9&#xff0c;13&#xff0c;16&#xff0c;25&#xff0c;32&#xff0c;64&#xff09;切换 2、支持拖拽效果 3、支持播放mp4&#xff0c;rtmp等 4、本人亲测支持播放32路&#xff0c;64路没做测试 5、支持读…

中职大数据技术应用就业方向解读

在信息化时代&#xff0c;各个行业都或多或少会需要运用到数据分析&#xff0c;因此大数据技术应用专业毕业生有着比较广泛的就业选择。 ●大数据技术应用● 主干课程 计算机网络基础、C语言程序设计、常用软件应用、计算机编程基础、数据库基础应用、计算机网络基础…

Upload-labs(Pass-14 - Pass-16)

Pass-14 &#xff08;图片马&#xff0c;判断文件类型&#xff09; 图片的格式在防护中通常是不会使用后缀进行判断的依据&#xff0c;文件头是文件开头的一段二进制码&#xff0c;不同类型的图片也就会有不同的二进制头。   JPEG (jpg)&#xff0c;文件头&#xff1a;FF D…

The 0-1 Knapsack Problem KNAPSACK

Problem Let U {u1, u2, . . . , un} be a set of n items to be packed in a knapsack of size C. For 1 ≤ j ≤ n, let sj and vj be the size and value of the jth item, respectively. Here C and sj, vj , 1 ≤ j ≤ n, are all positive integers. Each item should e…

ELK日志收集和备份填坑实战 (滞后8个小时等时区问题)

ES的备份&#xff1a;ES快照备份 根据时间&#xff0c;每天零点在Linux机器crontab来调用api接口实现快照备份&#xff0c;通过快照备份&#xff0c;可以定准恢复到某一天的日志。 现象&#xff1a;&#xff08;坑&#xff1a;但是恢复某一天日志&#xff0c;发现会少8小时的日…