方法一、用递归。
方法二、把兔子定义成结构,每个兔子自带计时器变量,繁殖就是新建节点,构建结构链表。每次循环遍历所有节点的计时变量大于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=1i<=ni++)
printf("经过%d个月后:兔子数量为:%d\n",i,childbirth(0,i))
return 0
}
根据题意,得出以下结果:年份:0 0.5 1 1.5 2 2.5 3 3.5 4 ...
兔子:1 1 2 3 5 8 13 21 34...
序号: 0 1 2 3 4 5 6 7 8...
所以发现规律:除前两个外,后面的则是等于前两个的种即:A0=1,A2=1,An=A(n-1)+A(n-2)
这样程序就可以开始编制了
#include "stdio.h"
main()
{
int year,total,i,a1,a2
printf("\n请输入多少年后:")
scanf("%d",&year)
a1=1
a2=1
for(i=2i<2*yeari++)
{
if(i%2==1)
{
a1=a1+a2
total=a1
}else{
a2=a1+a2
total=a2
}
}
printf("\n第%d年末总共会有%d对兔子",year,total)
}
#include <stdio.h>main()
{
int i,tu1,tu2,tu3,m
tu1=1
tu2=1
pringf("请输入月份数(要求不大于24)")
scanf("%d",&m)
if(m==1||m==2)
{
printf("有一对兔子");
}
else if(m<2&&m<=24)
{
for(i=3i<=mi++)
{
tu3=tu1+tu2
tu1=tu2
tu2=tu3
}
printf("%d月的兔子数为#d\n",m,tu3)
}
else
{
printf("月份书输入不符合要求,程序结束\n")
}
}