兔子繁衍问题.对此问题本人有两种思路.
1.若能发现兔子对数按月份成斐波那契数列(即从第3项开始每项都等于前两项的和)的变化形式,
则可有相应的函数和循环两种计算方式.
a.创建一个以输入n为变量,输出为月数的函数.如:
#include<stdio.h>
int fact(int time);
int main()
{
int n,i;
scanf("%d",&n);
for(i=1;fact(i)<n;i++){}
printf("%d",i);
return 0;
}
int fact(int time)
{
if(time==1||time==2)
{
return 1;
}
else
{
return fact(time-1)+fact(time-2);
}
}
b.先对n的值分情况讨论,n=1和n=2时,结果为"1" ,"3";n>=3时,利用循环求解,下面以while为例:
#include<stdio.h>
int main()
{
int n,time,x1,x2,t;
x1=x2=1;
time=3;
scanf("%d",&n);
if(n==1)
{
printf("1");
}
else if(n==2)
{
printf("3");
}
else
{
while(n>x1+x2)
{
t=x2;
x2=x1+x2;
x1=t;
time++;
}
printf("%d",time);
}
return 0;
}
2.若是未看出其为斐波那契数列,也可画树状图,从第三个月开始将其拆分为两部分,从下部分对上部分的时间延迟的角度来写出计算式
代码如下:
#include<stdio.h>
int fact(int x);
int main()
{
int n;
printf("enter a number(0<number<10000)\n");
scanf("%d",&n);
printf("%d",fact(n));
return 0;
}
int fact(int x)
{
int num,x1,x2,t,time;
x1=x2=1;
time=3;
if(x==1)
{
return 1;
}
else if(x==2)
{
return 3;
}
else
{
while(x>x1+x2)
{
t=x2;
x2=x1;
x1=t+x1;
time++;
}
return time;
}
}