1.成年兔子,每年能生一对兔子,小兔子两年后成年,某人有一对兔子,假设兔子不死,且每次所生的兔子,都能恰好一对,则n年后,该人有兔子多少只?
我们可以容易想到,第n年的兔子数量为第n-1和n-2年兔子数量之和.(亦如斐波那契数列)
思路如下,也可以递推得到.
#include <stdio.h>
int getNum(int n)
{
if(n==1||n==2)
return 1;
else
return getNum(n-1)+getNum(n-2);
}
int main()
{
int n;
printf("input number:\n");
scanf("%d",&n);
while(n>=1)
{
printf("The Number of rabit is:%d\n",getNum(n));
printf("inputnumber:\n");
scanf("%d",&n);
}
return 0;
}
2.关于斐波那契数列的求法可以用
F(n) = | 1 1 | × | F(n-1) | = | 1 1 | ^ (n-1) * | 1 |
F(n-1) | 1 0 | | F(n-2) | | 1 0| | 1 |
有阵可以快速幂来求,此法可以提高效率。
3.那如果有每只兔子寿命都只有四年第n年的兔子在n+4年会死亡。那麽如下即可
第n年的兔子数量为第n-1和n-2年兔子数量之和减去n-4年的兔子.
#define NUMBER rabitcount
#include <stdio.h>
int getNum(int n)
{
if(n==1||n==2)
return NUMBER;
else
return getNum(n-1)+getNum(n-2);
}
int getNum(int n)
{
if(n==1||n==2)
return 1;
else if(n==3)
return 2;
else if(n==4)
return 3;
else if(n==5)
return 4;
else
{returngetNum(n-1)+(getNum(n-2)-getNum(n-4);}
}