北师珠的传说——丽泽湖水怪

北师珠的传说——丽泽湖水怪

在美丽的北京师范大学珠海分校,一直流传着一个神秘的故事。
相传,在第一代开拓者建校之时,原先打算建立四座学生宿舍给新生居住。
它们分别是:海华苑1栋、海华苑2栋、海华苑3栋、海华苑4栋。
在那个即将开学的夏天,海华1、2、3栋顺利完工,而海华苑4栋,却发生了许多诡异的事情。。。
种种事件发生后,校方无奈,最终将海华苑4栋改建为学三食堂。
但谁都没有注意到,与之一路相隔的丽泽湖,也发生了一些奇怪的变化。。。

湖内出现了一些奇怪的生物。
它们身材娇小,速度敏捷。
平日他们隐藏于水中,隐于人世。
而在每个春夏之交的雨夜,它们就会爬上尘世,用它们凄凉的语言,向所有北师人,诉说那段悲惨的往事。。。

而近些年,这种生物(我们叫它们“丽泽湖水怪”)的数量似乎出现了疯狂的增长。渐渐的,人们开始担心它们将占领校园,最终将北师毁于一旦。
出于正义的反抗,学校在丽泽湖畔成立“未来地球研究院”,防止“丽泽湖水怪”占领学校乃至整个地球。

“未来地球研究院”发现,“丽泽湖水怪”的繁殖非常迅速。每只水怪每年年初生一只小水怪,而每只小水怪从第四个年头开始,每年年初也生一只小水怪。
现在,研究员想知道,一只“丽泽湖水怪”正常繁殖,第n年时会有多少丽泽湖水怪?(丽泽湖水怪的寿命非常长。。。事实上由于未观测到正常死亡的个体我们还不知道它们的寿命到底有多长)
输入要求
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0 n=0表示输入数据的结束,不做处理。
输出要求
对于每个测试实例,输出在第n年的时候“丽泽湖水怪”的数量。
每个输出占一行。

输入
2
4
5
0

输出
2
4
6

题目来源:杭电OJ-有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

(就是斐波那契【Fibonacci】数列的拓展哇

#include 
int main()
{
	int monster[55] = {0, 1, 2, 3, 4};
	int n, i;
	for(i = 5; i < 55; i++)
		monster[i] = monster[i-1] + monster[i-3];
	scanf("%d", &n);
	while(n != 0){
		printf("%d\n", monster[n]);
		scanf("%d", &n);
	}
	return 0;
}

这里我们用迭代方式而不用递归,想知道为什么吗?继续往下看吧嘿嘿
(这个结果在54的时候会比较大
这段代码的算法时间复杂度会比重复计算一个n小
所以这段代码就可以在规定时间限制内完成任务)
—————————————————简陋的分割线——————————————————————
昨天刚遇到这道题,今天阅读《大话数据结构》“栈与队列”就遇到了,世界真奇妙2333
书上的例子是这样的:

程杰大大写得很清楚,我就copy一次嘿嘿(就当用来记录我的学习过程吧
请看:
北师珠的传说——丽泽湖水怪_第1张图片
北师珠的传说——丽泽湖水怪_第2张图片
这里有俩种方法:迭代、递归
一、迭代:

int main()
{
	int i;
	int a[40];  
	a[0]=0;
	a[1]=1;
	printf("%d ",a[0]);  
	printf("%d ",a[1]);  
	for(i = 2;i < 40;i++)  
	{ 
		a[i] = a[i-1] + a[i-2];  
		printf("%d ",a[i]);  
	}
	return 0;
}

二、递归:

int Fbi(int i)
{
	if( i < 2 )
		return i == 0 ? 0 : 1;  
    return Fbi(i - 1) + Fbi(i - 2);  
}
int main()
{
	int i;
	for(i = 0;i < 40;i++)
		printf("%d ",Fbi(i));
	return 0;
}

代码都很简单相信大家都能看懂
那我说说迭代和递归的区别。
1、迭代使用循环结构,递归使用选择结构
2、递归使得程序结构更清晰简洁,减少读懂代码时间
3、but大量递归调用会建立函数副本,耗费大量时间和内存。迭代则不需要反复调用函数和占用额外内存

over.注:本文内容基本来源于《大话数据结构》一书

你可能感兴趣的:(C语言)