兔子产子问题

/*
题目:兔子产子问题
内容:有一对兔子,从出生后的第3个月起每个月都生一对兔子。小兔子长到第三个月
      后每个月又生一对兔子,假设所有的兔子都不死,问30个月内每个月的兔子总数
	  为多少?
作答者:小白杨
收获:1、该题目是典型的迭代循环,而自己没看出来。即是一个变量不断用新值取代
         变量旧值,然后由变量旧值递推出变量新值的过程。算法可以描述为
		 {fib = fib2 = 1(n=1,2)初值  fibn = fibn-1 + fibn-2(n>=3)迭代公式 
 
*/

#include <stdio.h>
/* 
int main()
{
	int month,i;
	int a[31] = {0};       //定义一个数组存储每个月新生的兔子 
	
	a[1] = 1;              //第一个月的兔子为一个 
	printf("第1个月的兔子为1个\n");
	for(month=2;month<=30;month++)
	{
		for(i=0;i<month-1;i++)
		{
			a[month] += a[i];  //第N个月新生的兔子为从0~N-2个月的兔子之和 
		}
		printf("第%d个月的兔子为%d个\n",month,2*a[month]+a[month-1]);
	 } 
	 
	 return 0;
 }*/
 
 void main()
 {
 	long fib,fib1 = 1,fib2 = 1;
 	int month;
 	
 	printf("%12ld%12ld",fib1,fib2);  //输出第1个月和第2个月的兔子数
	 
	 for(month=3;month<=30;month++)
	 {
	 	fib = fib1+fib2;            //迭代求出当前月份的兔子数
		printf("%12d",fib);        //输出当前月份的兔子数
		if(month%4 == 0)
			printf("\n");           //每行输出4个
		fib2 = fib1;
		fib1 = fib; 
	  } 
  } 
/*
再优化:目前用三个变量来求下一个月的兔子数,其实可以在循环体中一次求出两个月的
        兔子数,就可以只用两个变量来实现。
		
		void main()
		{
	    	long fib1=1,fib2=1;
	    	int i;
	    	
	    	for(i=1;i<=15;i++)       //每次求两个,因此循环变量循环到15
			{
				printf("%12d%12d",fib1,fib2);
				if(i%2 == 0)
					printf("\n");
				fib1 = fib1+fib2;
				fib2 = fib1+fib2; 
			} 
		}
*/ 

猜你喜欢

转载自blog.csdn.net/janmesyang/article/details/83187474
今日推荐