当前位置:首页 » 编程语言 » C语言兔子繁殖问题1056
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

C语言兔子繁殖问题1056

发布时间: 2023-02-26 07:28:57

c语言 兔子的繁殖问题(注意,就是按题目样例要求输入然后输出,要一样)

#include<stdio.h>

int main()
{
int a[50];
int i,t,n;
a[0]=1;
a[1]=1;
for(i=2;i<50;i++)
a[i]=a[i-1]+a[i-2];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%d\n",a[n]);
}
return 0;
}

❷ C语言编程:兔子繁殖问题

如图,此题难度较大,要用到队列(我优化为循环队列)(此题有两个提问,都是我回答所以一样)

#include<stdio.h>
#defineLIFETIME13 //兔子寿命,单位半年(年龄小于此!)
#defineINITNUM1 //初始兔子有多少对
main()
{
inthY=0; //兔子历(就是时刻表):单位:半年
intnum[LIFETIME]={INITNUM,0}; //存储不同年龄兔子的对数(初始为0岁1对)
//babyI下标代表0岁,往前年龄增大,越过数组下界跳到上界,所以babyI+1反而是最老兔子
intbabyI=0; //0岁兔子对应下标,年龄单位为半年
intloveNum=0; //可生育兔子数量
inttotalNum=INITNUM; //总计兔子数量
intage1I=LIFETIME-2; //1岁兔子对应下标(开始能生育)
intage5_5I=LIFETIME-11; //1岁、5.5岁兔子对应下标(刚好能生育、刚好不能生育年龄)
intn=30; //输入n半年后!
while(hY<=n){
inti,j; //遍历临时变量。①展示兔子数量。
printf("第%.1f年 总计:%d对 可生育:%d对 ",(float)hY/2,totalNum,loveNum);
/*
for(i=0;i<LIFETIME;i++){
printf("%.1f岁 ",(float)i/2); //打印表头
//printf("%d,%.1f岁 ",i,(float)(++i)/2); //打印表头
}printf("单位:对 "); //换行*/
i=babyI; //显示各年龄对应数量
j=0;
do{
//printf("%d ",num[i]);
if(hY<21){ //仅用于加 显示
if((++j)%2==0)printf(" ");}
printf("%d",num[i]);
if(i>0)i--; //下标循环往左移动
elsei=LIFETIME-1;
}while(i!=babyI);
printf(" "); //换行

//②半年后
hY++; //时间过去半年
age1I=(age1I+1)%LIFETIME; //1岁数量(对)对应下标
age5_5I=(age5_5I+1)%LIFETIME;//5.5岁数量(对)对应下标
//printf("%d,%d ",age1I,age5_5I);
loveNum+=num[age1I]-num[age5_5I]; //可生育兔子数量(对)

babyI=(babyI+1)%LIFETIME; //新babyI设为原最老兔子的下标,
totalNum+=loveNum-num[babyI]; //每对大兔子可以生一对小兔子-死亡的老兔
num[babyI]=loveNum; //老兔的位置换成新兔
}
}

❸ C语言编程题目 兔子繁衍问题

方法一、用递归。

方法二、把兔子定义成结构,每个兔子自带计时器变量,繁殖就是新建节点,构建结构链表。每次循环遍历所有节点的计时变量大于3的就新建一个节点插入链表。最后统计节点数量。

我用方法1来写:

#include <stdio.h>

int childbirth(int bMth,int gMth)//bMth:调用时传0,gMth:经过的最大月数


{


int cnt=0,n=bMth,num=2;


while(n++<gMth+1)


if(cnt++>2)


num=num+childbirth(n,gMth+1);


return num;


}

int main()


{


int i,n;


printf("请输入经过多少月:"),scanf("%d",&n);


for(i=1;i<=n;i++)


printf("经过%d个月后:兔子数量为:%d ",i,childbirth(0,i));


return 0;


}

❹ c语言数组 兔子繁殖

double a[100];
printf("第%d个月的兔子为:%0.2f\n", n, a[n-1]);
改一下

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

你图中的代码不对,题目明明说了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对 ",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对兔子 ",month,x[0],x[1],x[2],x


[3],cnt);

if(cnt>=n) break;

}

return 0;

}

❻ 兔子繁殖,C语言

#include<stdio.h>
intmain(void)
{
intn,i,a,b,c;
a=0;
b=1;
i=1;
printf("请输入兔子对数n=");
scanf("%d",&n);
while(b<n){
c=a+b;/*while里面一次循环是1个月*/
a=b;
b=c;
i++;
}
printf("至少%d月",i);
return0;
}

❼ C语言编程:兔子繁殖问题

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#defineM13
intmain()
{
inti;
longa[M]={1,1};
for(i=2;i<M;i++)
{
a[i]=a[i-1]+a[i-2];

}
for(i=0;i<M;i++)
{
printf("%d月兔子总数:%d ",i,a[i]);

}
getch();
return0;}