【想进阿里的小菜鸟】C程序经典100例 No.7

No.7
好久不写博客了,这几天一直被这样那样的事情烦着,但是代码一直在写,今天就来一道比较好玩的题吧!

古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月)

根据谭浩强的《C语言程序设计》一书,我们可以通过画表格来理清思路。
【想进阿里的小菜鸟】C程序经典100例 No.7
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!
今天是好冷的一天!

上一篇:Java中Exception 和 Error 的区别


下一篇:【Java】异常