C语言迭代法兔子繁殖问题
#includestdio.h
int main(void)
{
long f1=1,f2=1;//定义数量
int i;//定义循环
int n;//定义月份
printf(“请输入月数:”);
scanf(“%d”,n);
if(i%2==1)//第奇数项,i%2必为1
{
n=(n+1)/2;//每一轮计算两项,要n=1时计算1轮;n=3时计算2轮
}
else
{
n=n/2;//每一轮计算两项,要n=2时计算1轮;n=4时计算2轮
}
for(i=1;i=n;i++)
{
printf(“第%d月有%d只\n”,i*2-1,f1);//每一轮计算2项,且奇数项在f1中
printf(“第%d月有%d只\n”,i*2,f2);//每一轮计算2项,且偶数数项在f2中
f1=f1+f2; //下一个奇数项
f2=f1+f2; //下一个偶数项
}
return 0;
}
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\n”,i,childbirth(0,i));
return 0;
}
C语言 兔子的繁殖问题(注意,就是按题目样例要求输入然后输出,要一样)
#includestdio.h
int main()
{
int a[50];
int i,t,n;
a[0]=1;
a[1]=1;
for(i=2;i50;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语言编程:兔子繁殖问题
思路不要乱。这个月的兔子只有两个来源,一个来源是上个月的老兔子,另一个来源是这个月刚出生的兔子,而这个月刚出生的兔子,就是两个月前的所有兔子,因为两个月前的所有兔子,无论两个月前就是老的,还是两个月前刚生的,到了这个月就全部具有生育能力,每只都可以下一对儿,所以可以得到一个递推关系f(n) = f(n – 1) + f(n – 2)。那么程序自然是
long fun(int month)
{
if(month == 1 || month == 2)
return 1;
else
return fun(month – 1) + fun(month -2);
}
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
int main()
{
int Mon;
long Num;
scanf(“%d”,Mon);
Num = fun(Mon);
printf(“第%d月共有兔子%ld只\n”,Mon,Num);
return 0;
}
至于你的程序,很难把它改正确,因为这题压根不是那个思路,那样想会越想越乱的
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(n10000);
printf(“第1个月,有新生兔子%d对\n”,x[0]);
while(1)
{
month++;
for(i=M;i0;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;
}