C语言问题,这个代码功能是怎么实现的,帮我解释下这个代码?

 我来答
自我编程
2021-03-09 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

你图中的代码不对,题目明明说了3个月后开始生,你这代码x明显是总对数,月份从1开始,带入这个代码,先不管别的,第一次循环结束(也就是第二个月)x就是2对了。兔子刚出生1个月就生。

我写得话,用一个数组做成长队列,数组最后一个元素才是可以生育的兔子对数。下面是演示代码(我理解题目说的“3月后开始生”,就是第4个月生,如你认为第3个月就开始生,自行修改常量即可)

代码输出兔子成长繁殖过程,常量包括初始兔子数量,繁殖增量,繁殖周期,可自行修改。

思路:代码中变量数组x,每个元素分别对应:新生兔子数,1个月大的兔子数,2个月大的兔子数,3个月大的兔子数。每经过一个月数组前一个元素值会累加到后一个元素值表示成长,同时最后一个元素值就是生育的兔子,生育出的新生兔会放在第一个元素中,如此循环。变量cnt是累计总数。所有数值单位是对。

#include <stdio.h>

#define N 1

#define M 3//出生几个月后开始生

#define RN 1//每对兔子每月生出对数

int main()

{

    int n,i,cnt=N,x[M+1]={0},month=1;

    x[0]=cnt;

    do

        printf("请输入期望多少对兔子:"),scanf("%d",&n);

    while(n>10000);

    printf("第1个月,有新生兔子%d对\n",x[0]);

    while(1)

    {

        month++;

        for(i=M;i>0;i--)

            x[i]+=x[i-1],x[i-1]=0;//未超3个月的兔子成长一个月

        x[0]=x[M]*RN;//新当月出生的兔子进入成长队列

        for(i=0,cnt=0;i<=M;cnt+=x[i],i++);//统计兔子总数(单位:对)

        printf("第%d个月,新生%d对,1个月大的%d对,2个月的%d对,3个月的%d对,共计%d对兔子\n",month,x[0],x[1],x[2],x


[3],cnt);

        if(cnt>=n) break;

    }

    return 0;

}

一剑出血
高粉答主

2021-03-09 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.7亿
展开全部
变量x是兔子的对数,
变量x1是具有生育能力的兔子的对数。
其实就是这两对数的不断累加:(1,0)(2,1)(3,2)(5,3)(8,5)(13,8)……
另外吐槽一句,mouth = 月??????
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式