No.7
好久不写博客了,这几天一直被这样那样的事情烦着,但是代码一直在写,今天就来一道比较好玩的题吧!
古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月)
根据谭浩强的《C语言程序设计》一书,我们可以通过画表格来理清思路。
CSDN怎么插表格?为什么只能插几列啊?(这是我从Excel里列好之后截的图)
从表中数据可知,我们要输出的数据便是1,1,2,3,5,8,13…这便是有趣的Fibonacci数列,我们可以看到后一项便是前两项之和,由此可以得到项与项之间的关系式,有了关系式,本题就迎刃而解了。
我的答案:
#include<stdio.h>
int main()
{
int s1=1,s2=1,sn,i;
printf("%12d", s1);
printf("%12d", s2);
for (i = 3; i <= 40; i++)
{
sn = s1 + s2;//用数列思想
s1 = s2;//改变项的值
s2 = sn;
printf("%12d", sn);
if (i % 5 == 0)//输出换行
printf("\n");
}
}
标准答案:
#include<stdio.h>
int main()
{
int f1=1,f2=1,i;
for(i=1;i<=20;i++)
{
printf("%12d%12d",f1,f2);
if(i%2==0) printf("\n");
f1=f1+f2;//可以充当下一次运算的f1
f2=f1+f2;//可以充当下一次运算的f2
}
return 0;
}
标准答案的思想就比较巧妙了,它是把f1,f2看成一个整体,整体运算,整体输出。
由这道题可以启发一系列数列类型的题,项与项之间的关系来得到递推式,以及答案中给出的可以把两项看作整体之类。
今天的分享就到这里。
Bingo!
今天是好冷的一天!