PTA 兔子繁衍问题(15分)

news/2025/2/27 19:41:54/文章来源:https://www.cnblogs.com/wishxian/p/18741790

PTA 兔子繁衍问题

题目描述

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

输入格式

输入在一行中给出一个不超过10000的正整数N

输出格式

在一行中输出兔子总数达到N最少需要的月数。

输入样例

30

输出样例

9

解题

依题可知:

第一个月兔子总数为1

第二个月兔子总数仍为1

第三个月这一对兔子开始生兔子,因此兔子总数为1+1=2

第四个月兔子继续繁殖,因此总数为2+1=3

第五个月这对兔子生下的第一对兔子也开始繁殖,因此总数变为3+2=5

……

月份:1 2 3 4 5 6 ...

数量:1 1 2 3 5 8...

由上述推导可知,除了第一个月和第二个月兔子没有开始繁殖总数为1,后面每个月的总数均为前面两个月总数之和,因此可以写出以下代码:

#include<stdio.h>
int main(){int n;int a[10001];scanf("%d",&n);int sum=0;a[0]=1,a[1]=1;sum=a[0]+a[1];int i=2;//a[0],a[1]已知,因此从第三个数组开始加起while(sum<n){//兔子总数未达到要求,继续进入循环a[i]=a[i-2]+a[i-1];sum+=a[i];i++;}printf("%d",i+2);return 0;
}

错误分析

错误的累加逻辑:原代码中的sum变量累加了所有月份的增量(即斐波那契数列的项),而实际总数应为斐波那契数列的当前项。例如,第三个月的总数应为2对,但原代码将sum计算为1(初始值) + 2(第三个月的增量)= 3,导致错误。

月份计算错误:原代码在退出循环后,通过i的值进行月份判断,但未正确关联数组索引与月份。正确的月份应为索引i加1(例如,索引2对应第三个月)。

答案

这是斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N)。

这个数列的应用有很多比如:兔子繁衍问题、数字谜题、杨辉三角、黄金分割、矩形面积、自然界中的“巧合”、尾数循环等等。

修正说明

  • 直接比较斐波那契项:每月总数即斐波那契数列的项a[i]。当a[i] >= n时,找到所需月份。
  • 调整月份输出:数组索引i对应的实际月份为i + 1,确保输出正确的最小月份。
  • 简化逻辑:移除不必要的sum累加和复杂判断,直接遍历斐波那契数列直至找到符合条件的项。

最终修改如下:

#include<stdio.h>
int main() {int n;scanf("%d", &n);if (n <= 0) {printf("0");return 0;}if (n == 1) {printf("1");return 0;}int a[10001];a[0] = 1;a[1] = 1;int i;for (i = 2; i < 10001; i++) {a[i] = a[i-1] + a[i-2];if (a[i] >= n) {printf("%d", i + 1);return 0;}}// 处理可能的数组越界情况(根据题目约束可调整数组大小)return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软工作业1:自我介绍+软工5问

这个作业属于哪个课程 软工23级这个作业要求在哪里 自我介绍+软工五问这个作业的目标 熟悉博客园以及Github的相关操作,了解软件工程相关内容1.自我介绍兴趣爱好:羽乒人,爱听歌,电影,楷书,行楷 编程语言:C,JAVA 目标:后端开发2.软工五问软件工程在对就业上的帮助的具体…

对“推箱子”小游戏代码的改进

一.代码来源 https://www.cnblogs.com/heyu123/p/14844284.html 二.运行环境 DEV--C++ 三.原代码及其运行结果 原代码: int map[8][8]={{1,1,1,1,1,1,1,1},//0 空地 {1,0,0,0,1,0,0,1},//1 墙 {1,0,1,0,1,4,3,1},//3 目的地 {1,0,0,0,0,4,3,1},//4 箱子 {1,0,1,0,1,4,3,1},//5…

软件开发与创新课程设计作业——软件逆向设计

一、来源:软件工程2班李鹏飞去年的大作业`点击查看代码 #include <iostream> #include <string> #include <fstream> using namespace std;//定义客户类型 enum eGuestType // 在高版本VS中,需要用enum class,在低版本的vs中,直接用enum也可以 {e_member…

LVI_SAM 虚拟机安装复现(一)

0. 前言 高能警告:LVI_SAM 的安装步骤是繁琐的,一个坑接着一个坑,请预留48+小时的安装时间,和80%以上的san值。非战斗人员请尽快撤离。 预备知识:虚拟机安装步骤,ROS基本概念,Makefile工作原理 没有预备知识的话,也没关系,本文也不会给你解释的( 本文是第一大步骤,即…

大模型--三种三种检索方式-Dense retrieval / Lexical Retrieval / Multi-Vector Retrieval- 44

1. 参考 M3-Embedding https://github.com/FlagOpen/FlagEmbedding https://arxiv.org/pdf/2402.03216 https://huggingface.co/BAAI/bge-m3 2. Dense retrievalimport torch import torch.nn as nnclass DenseRetrieval(nn.Module):def __init__(self, embedding_dim):super(D…

从拉新到留存,用户生命周期分析全流程

已收藏分享从拉新到留存,用户生命周期分析全流程 2025-02-17 17:02人人都是产品经理在当今竞争激烈的市场环境中,理解并管理用户生命周期是实现用户增长和留存的关键。本文将深入剖析用户生命周期的全流程管理,从拉新到留存,详细解读不同业务类型(如消费品、耐用品、平台型…

朴素贝叶斯其实并不朴素

朴素贝叶斯英文名称NaiveBayes,朴素贝叶斯确实nave,但是并不朴素,而是简单,并不是逻辑上面的简单,而是假设上面的简单。 1.贝叶斯公式 ​ 其中: P(C|X)是类C在给定特征X下的后验概率。 P(X|C)是特征X在给定类C下的条件概率,也叫做似然。 P(C)是类C的先验概率。 P(X)是特…

NocoBase 本周更新汇总:新增路由管理

本周更新包括:支持为页面标签页配置权限,新增路由管理页面等。汇总一周产品更新日志,最新发布可以前往我们的博客查看。 NocoBase 目前更新包括的版本更新包括三个分支:main ,next和 develop。main :截止目前最稳定的版本,推荐安装此版本。 next:包含即将发布的新功能,…

AI安全-模型用户输入注入

顾名思义,在调用AI大模型时,根据用户传入的数据,进行AI处理,调用插件,但模型后端需要调用API,API需要传入的username一个小场景,企业微信对话调用AI去修改当前密码 假设开发者设计如下: 用户输入-> AI -> 调用插件修改密码 修改密码插件实现:a.com/change_passw…

基于Microsoft.Extensions.VectorData实现语义搜索

本文介绍了Microsoft.Extensions.Vector的基本概念 和 基本使用,结合Embedding Model(如all-minilm) 和 VectorStore(如Qdrant),我们可以快速实现语义搜索,而不仅仅是关键字匹配。如果你也是.NET程序员希望参与AI应用的开发,那就快快了解和使用基于Microsoft.Extensioi…

KubeSphere 企业版 v4.1.3 发布!可观测性深度优化,管理策略更灵活更安全

KubeSphere 企业版始终致力于为企业提供安全、稳定、高效的云原生全栈管理能力。在 4.1.3 版本中,KubeSphere 聚焦可观测性深度优化、策略管理灵活升级与安全隔离能力增强,推出多项新特性与优化,进一步释放企业云原生基础设施的潜力,助力业务高效运行与智能管理! 核心升级…