一、“巧用”Fibonacci数列
1. 兔子产子问题
有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总数为多少?
【分析】从第1个月起开始计算:
第一个月:1对
第二个月:1对
第三个月:2对(第一个月的一对生了一对小兔子)
第四个月:3对(已有2对,第一个月的一对又生了一对小兔子,共3对)
第五个月:5对(已有3对,第一个月的一对又生了一对小兔子,加上第三个月出生的那对兔子又生了一对,共5对)
第六个月:8对(已有5对,第一个月、第三个月和第四个月出生的那对兔子又生了三对,共8对)
…
如此进行下去,兔子对数满足Fibonacci数列各项变化规律:1,1,2,3,5,8, … 结合迭代法思想完成程序源代码:
法一:三变量迭代
#include <stdio.h>
#include <string.h>
int main()
{
int i;
int f,f1=1,f2=1;
printf("month1:%d\n",f1);
printf("month2:%d\n",f2);
for(i=3;i<=30;i++)
{
f=f1+f2;
printf("month%d:%d\n",i,f);
f2=f1; //为下一次迭代做准备
f1=f;
}
return 0;
}
法二:二变量迭代
#include <stdio.h>
#include <string.h>
int main()
{
int i=3;
int f1=1,f2=1;
printf("month1:%d\n",f1);
printf("month2:%d\n",f2);
for(i=3;i<=30;i+=2)
{
f1=f1+f2;
f2=f1+f2;
printf("month%d:%d\n",i,f1);
printf("month%d:%d\n",i+1,f2);
}
return 0;
}
程序截图:
2. N阶楼梯上楼问题Ⅰ
(选自2008 HUST计算机保研机试真题)有一N阶楼梯,1<=N<90,每次可以走一阶或两阶&