HJ37 统计每个月兔子的总数

news2025/1/16 1:57:27

HJ37 统计每个月兔子的总数

  • 描述
  • 示例
  • 解题思路以及代码分析
    • 解法1
    • 解法2

描述

描述
有一种兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子。
例子:假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。
一月的时候有一只兔子,假如兔子都不死,问第n个月的兔子总数为多少?
数据范围: 输入满足 1≤n≤31

输入描述:
输入一个int型整数表示第n个月

输出描述:
输出对应的兔子总数

示例

示例1
输入:
3
输出:
2

解题思路以及代码分析

解法1

暴力求解
该题就是兔子第三个月就可以生小兔子,然后小兔子满月了也可以在生小兔子。统计兔子个数。

那就申请一个记录未满月兔子数量的数组,还得申请一个记录未满月兔子第几个月的数组,只要满足2个月了,那么就是第三个月可以生小兔子的兔子,因此还得申请一个变量记录可以生兔子的兔子,最后把可以生兔子的兔子和未满月的兔子都加起来就可以了。说着有点麻烦,那我们画图分析一下吧!

第一个月

    //1月份
    NFMRabbit[1]=1;
    RSubscript[1]=1;

    int FistrNoFMRT=1;
    int FinalNoFMRT=1;

在这里插入图片描述
第二个月
每个月先检查是否有可以生兔子的兔子,有的话就生,然后给没满月的兔子都加一个月,看看有没有满月的兔。有的话这个兔子就是一个可以生兔子的兔子。

    //从2月开始记录
    int i=0;
    for(i=2;i<=Month;i++)
    {  
        //产兔
        int j=FMRabbit;
        while(j--)
        {
            NFMRabbit[++FinalNoFMRT]=1;
        }
        //检查是否有资格可以下个月生兔子 
        if(FistrNoFMRT <= FinalNoFMRT)
        {
            int k=FistrNoFMRT;
            while(k<=FinalNoFMRT)
            {
                RSubscript[k]+=1;
                if(RSubscript[k] == 2)
                {
                    FMRabbit+=1;
                    FistrNoFMRT++;
                }
                k++;
            }
        }
    }

在这里插入图片描述

第三个月
在这里插入图片描述
第四个月
在这里插入图片描述
第五个月
在这里插入图片描述
假如Month=5;那么把未满月的和满月的兔子加起来就是最终答案

    //统计兔子数量
    int m=0;
    int NoFMRsum=0;
    for(int m=FistrNoFMRT;m<=FinalNoFMRT;m++)
    {
        NoFMRsum+=1;
    }
    printf("%d\n",NoFMRsum+FMRabbit);
int main() {
    int Month=0;
    scanf("%d",&Month);
    int FMRabbit=0;
    int* NFMRabbit=(int*)calloc(10000000,sizeof(int));
    int* RSubscript=(int*)calloc(10000000,sizeof(int));

    //1月份
    NFMRabbit[1]=1;
    RSubscript[1]=1;

    int FistrNoFMRT=1;
    int FinalNoFMRT=1;

    //从2月开始记录
    int i=0;
    for(i=2;i<=Month;i++)
    {  
        //产兔
        int j=FMRabbit;
        while(j--)
        {
            NFMRabbit[++FinalNoFMRT]=1;
        }
        //检查是否有资格可以下个月生兔子 
        if(FistrNoFMRT <= FinalNoFMRT)
        {
            int k=FistrNoFMRT;
            while(k<=FinalNoFMRT)
            {
                RSubscript[k]+=1;
                if(RSubscript[k] == 2)
                {
                    FMRabbit+=1;
                    FistrNoFMRT++;
                }
                k++;
            }
        }
    }
    
    //统计兔子数量
    int m=0;
    int NoFMRsum=0;
    for(int m=FistrNoFMRT;m<=FinalNoFMRT;m++)
    {
        NoFMRsum+=1;
    }
    printf("%d\n",NoFMRsum+FMRabbit);

    return 0;
}

解法2

这个题细心的同学可以发现,这其实是一个斐波那契数列。第 n 个月的兔子数量实际上就是第 n-1 个斐波那契数。从第三个数开始,每个数都是第N-1项和第N-2项的和。
在这里插入图片描述

int main() {

    int n=0;
    while(scanf("%d",&n) != EOF)
    {
        if(n<3)
        {
            printf("%d",1);
        }
        else
        {
            int num1=1,num2=1,sum=0;
            for(int i=3;i<=n;i++)
            {
                sum=num1+num2;
                num1=num2;
                num2=sum;
            }
            printf("%d",sum);
        }

    }

    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASEMI代理ADUM3211TRZ-RL7原装ADI车规级ADUM3211TRZ-RL7

编辑&#xff1a;ll ASEMI代理ADUM3211TRZ-RL7原装ADI车规级ADUM3211TRZ-RL7 型号&#xff1a;ADUM3211TRZ-RL7 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;SOIC-8 批号&#xff1a;2023 引脚数量&#xff1a;8 工作温度&#xff1a;-40C~125C 安装类型&#xff1a;表…

操作系统原理 —— 操作系统什么时候会发生进程的调度(十二)

操作系统什么时候需要进程调度&#xff1f; 进程调度的层次中&#xff0c;有一个低级调度&#xff0c;就是按照某种算法从就绪队列中选择一个进程为其分配 CPU。 那操作系统会在什么时候触发进程调度呢&#xff1f; 在这里一共可以分为两大类&#xff1a; 当前运行的进程主动…

04-微服务部署2023系列-centos安装gitlab

目的:为了将来的devops快速部署搭建自己的代码库,保证速度和私密性 前面01-03小节: 完成基本的服务器环境 centos_nginx_java_docker; 这个基础环境是将来集群中每台服务器的基本, 可以先打一个镜像备份。 阿里云的镜像备份比较简单。以后搭建新服务器时,以这个为基础,安…

JUC并发包详解AQS同步队列

一、AQS介绍 在JUC并发包中&#xff0c;AQS为其最关键的作用&#xff0c;全称为abstractQueuedSynchroinzed同步器&#xff0c;为信号量semaphore、同步锁的基础抽象类。 其中内部主要有二大块 state 共享资源&#xff0c;通过并发操作state修改改值为1&#xff0c;如果修改成…

《Linux 内核设计与实现》09. 内核同步介绍

共享资源之所以要防止并发访问&#xff0c;是因为如果多个执行线程同时访问和操作数据&#xff0c;就有可能发生各线程之间相互覆盖共享数据的情况&#xff0c;从而造成被访问的数据不一致状态。 临界区和竞争条件 临界区&#xff1a;访问和操作共享数据的代码段。原子操作&a…

键控流水灯

项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第四章 IO口编写 在电路图的基础上&#xff0c;编写可键控的流水灯程序。要求实现的功能为&#xff0c;K1是总开关,当K1首次按下时&#xff0c;流水灯由下往上流动;当K2按下时停止流动&#xff0c;且全部灯灭…

ASK,FSK和PSK

一、ASK&#xff0c;FSK和PSK 数字信号只有有限个离散值&#xff0c;使用数字信号对载波进行调制的方式称为键控(Keying),分为幅度键控&#xff08;ASK)、频移键控&#xff08;FSK)和相移键控&#xff08;PSK)。 幅度键控可以通过乘法器和开关电路来实现&#xff0c;在数字信…

SpringBoot【开发实用篇】---- 配置高级

SpringBoot【开发实用篇】---- 配置高级 1. ConfigurationProperties2. 宽松绑定/松散绑定3. 常用计量单位绑定4. 校验5. 数据类型转换 进入开发实用篇第二章内容&#xff0c;配置高级&#xff0c;其实配置在基础篇讲了一部分&#xff0c;在运维实用篇讲了一部分&#xff0c;这…

离线安装Percona

前言 安装还是比较简单&#xff0c;这边简单进行记录一下。 版本差异 一、离线安装Percona 下载percona官网 去下载你需要对应的版本 jemalloc-3.6.0-1.el7.x86_64.rpm 需要单独下载 安装Percona 进入RPM安装文件目录&#xff0c;执行下面的脚本 yum localinstall *.rpm修改…

C语言CRC-16 X25格式校验函数

C语言CRC-16 X25格式校验函数 CRC-16校验产生2个字节长度的数据校验码&#xff0c;通过计算得到的校验码和获得的校验码比较&#xff0c;用于验证获得的数据的正确性。基本的CRC-16校验算法实现&#xff0c;参考&#xff1a; C语言标准CRC-16校验函数。 不同应用规范通过对输…

聊聊Doris向量化执行引擎-过滤操作

聊聊Doris向量化执行引擎-过滤操作 Doris是开源的新一代极速MPP数据库&#xff0c;和StarRocks同源&#xff0c;采用全面向量化技术&#xff0c;充分利用CPU单核资源&#xff0c;将单核执行性能做到极致。本文&#xff0c;我们聊聊过滤操作是如何利用SIMD指令进行向量化操作。 …

PCB设计流程步骤中的注意事项

PCB中文名称为印制电路板&#xff0c;又称印刷线路板&#xff0c;几乎所有电子设备中都会应用到PCB。这种由贵金属制成的绿色电路板连接了设备的所有电气组件&#xff0c;并使其能够正常运行。PCB原理图是一个计划&#xff0c;是一个蓝图。它说明的并不是组件将专门放置在何处&…

【51单片机HC6800-EM3 V3.0】动态数码管显示,原理分析,连线操作

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;提醒 &#x1f38a;连线图片 &#x1f38a;原理…

基于SSM框架扶贫信息综合平台前台管理系统(spring+springmvc+mybatis+jsp+jquery+css)

一、项目简介 本项目是一套基于SSM框架扶贫信息综合平台前台管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

【刷题】138. 复制带随机指针的链表

138. 复制带随机指针的链表 一、题目描述二、示例三、实现 138. 复制带随机指针的链表 一、题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝…

Matlab论文插图绘制模板第90期—带权重的有向图/图论图/网络图

在之前的文章中&#xff0c;分享了Matlab有向图的绘制模板&#xff1a; 进一步&#xff0c;如果我们想标注有向图的每条边的权重&#xff0c;或者直接用线条的粗细来表示权重&#xff0c;该怎么操作呢&#xff1f; 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内…

洛谷P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II(离线区间逆序对+莫队二次离线)

题目 给你一个长为n(1<n<1e5)的序列a(0<ai<1e9)&#xff0c; m(1<m<1e5)次询问&#xff0c;每次查询一个区间[l,r]的逆序对数&#xff0c;可离线。 思路来源 登录 - 洛谷 三道经典分块题的更优复杂度解法&[Ynoi2019模拟赛]题解 - 博客 - OldDriverT…

(异或相消)猫猫数字异或和

E - Red Scarf (atcoder.jp) 刚入坑写的一道题被我拉出来对比分析了 我的思路&#xff1a; 垃圾运气选手凭借直觉乱搞猜出来的&#xff0c;没有思路。 题解思路&#xff1a; 由问题陈述中XOR的定义&#xff0c;我们可以看出计算3个或更多整数的XOR可以以任意顺序进行&#…

fastjson 代码执行 (CNVD-2017-02833)

漏洞存在原因 在fastjson<1.2.24版本中&#xff0c;在解析json的过程中&#xff0c;支持使用autoType来实例化某一个具体的类&#xff0c;并调用该类的set/get方法来访问属性。而在1.24<fastjson<1.2.48版本中后增加了反序列化白名单。 漏洞复现过程如下 在vulfocu…

解读ChatGPT中的RLHF

无论是 ChatGPT 还是 GPT-4&#xff0c;它们的核心技术机制之一都是基于人类反馈的强化学习&#xff08;Reinforcement Learning from Human Feedback&#xff0c;RLHF&#xff09;。这是大型语言模型生成领域的新训练范式&#xff0c;即以强化学习方式依据人类反馈优化语言模型…