有一个农夫有4只兔子,这四只兔子每个月又生四只,问3年后农夫有几只兔子
最好用初中的知识回答不要太难
参考答案:呵呵 C语言编程经常有这样的问题!斐波纳奇数列!斐波纳奇数列是一对
这2对
兔子数列问题:第一个月有一对兔子,每一对兔子从出生起每过2个月就可以再繁殖一对兔子,求第n个月有多少对兔子。
母牛数列问题:若一头小母牛,从出生起第四个年头开始每年生一头母牛,按此规律,求第n年时有多少头母牛。
兔子数列又称菲波那契数列:1,1,2,3,5,8,13,21,34,55,89,……
编程求数列这种问题,要先找规律,所以要学会在稿纸上分析数列,下面我列一个草稿:
月份 上月的兔子对数 新生的兔子对数 兔子的总对数
1 1
2 1 0 1+0=1
3 1 1 1+1=2
4 2 1 2+1=3
5 3 2 3+2=5
6 5 3 5+3=8
……
我们知道开始只有一对兔子,问题是怎么求每个月新增加的兔子。仔细分析,你会发现,其实每个月新增加的兔子对数就等于上个月的上个月的兔子总对数,简单的说,也就是每个月新增加的兔子对数等于前两个月的兔子的总对数,这其实也不难理解,因为兔子每过2个月就生一对,那么上个月新出生的兔子肯定不能生兔子,所以每个月新增加的兔子对数等于前两个月的兔子的总对数。废话这多,但是分析清楚了,那么我们只需要拿两个变量,一个记录上个月兔子的对数,一个记录新生的兔子对数,也就是上上个月的兔子对数就可以了,每过一个月,当月的兔子对数就等于上个月加上上上个月兔子对数,然后把记录上上个月的变量重新赋值为记录上个月的变量,把记录上个月的变量重新赋值为当月的值,就可以了。程序如下:
#include<iostream.h>
void main()
{
long f1=1,f2=1,sum=1; // f1:上个月的 f2:上上个月的
int n;
cout<<"求第几个月的兔子的数目?";
cin>>n;
for(int i=2;i<n;i++) // 注意这里i=2是因为前2个月的兔子对数为1,因前2个月都没有出生新兔子。
{
sum=f1+f2;
f2=f1;
f1=sum;
}
cout<<"第"<<n<<"个月共有"<<sum<<"对兔子。"<<endl;
}