/*
题目:兔子产子问题
内容:有一对兔子,从出生后的第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
今日推荐
周排行