C语言_兔子问题(斐波那契数列)

2020年9月2日 10:35:31

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

第一道代码:

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

#include <stdio.h>
#include <stdlib.h>


int main(void)
{
	long f1, f2;
	int i;
	f1 = f2 = 1;

	for (i = 1; i <= 20; i++)  // 输出前 40 个数,每次输出 2 个; 执行 20 次循环
	{
		printf("%12ld %12ld", f1, f2);  // 长整型, 12个字符,右对齐; 中间有空格

		if (i % 2 == 0)  // 一次输出 2 个, 两次输出 4 个。这条语句的目的是:一行输出 4 个
			printf("\n");

		f1 = f1 + f2;
		f2 = f1 + f2;
	}
	system("pause");

	return;
}

运行结果:

在这里插入图片描述

第二道代码:

#include <stdio.h>

int main(void)
{
	int a[24] = { 1,1 };  //定义一个数组,数组含有 24 个元素,其中第一、二个元素分别是 1,1
	int m;
	for (m = 0; m < 24; m++)
	{
		if (m >= 2)
			a[m] = a[m - 1] + a[m - 2];

		printf("第 %d 个月有 %d 对兔子\n", m + 1, a[m]);
	}
	return;
}

运行结果:

在这里插入图片描述
-------------分界线-------------

补充:将上面两道代码合成一道代码,用指针子函数调用。
时间:2020年9月4日 07:55:30

#include <stdio.h>
#include <stdlib.h>

void Method2(int *, int len);

int main(void)
{
	long f1, f2;
	int i;
	f1 = f2 = 1;

	for (i = 1; i <= 20; i++)  
	{
		printf("%12ld %12ld", f1, f2);  

		if (i % 2 == 0) 
			printf("\n");

		f1 = f1 + f2;
		f2 = f1 + f2;
	}
	system("pause");
	printf("\n");
	
	int a[24] = { 1,1 };   // 子涵数需要用到的数组写在 main函数里 
	Method2(a, 24);
	
	system("pause");
	return;
}

void Method2(int * p, int len)
{
	int m;
	for (m = 0; m < len; ++m)  // m < len, 而不能直接写成 m < 24 
	{
		if (m >= 2)
			p[m] = p[m - 1] + p[m - 2];  // 这里写 p[m] 而不能写成 a[m] 

		printf("第 %d 个月有 %d 对兔子\n", m + 1, p[m]);
	}
	return;
}

运行结果:

在这里插入图片描述


版权声明:本文为weixin_45982321原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。