c语言循环题兔子第三个月生,C语言·古典问题: 兔子总数

古典问题: 兔子总数

题目:

有一对兔子,从出生第3个月起每个月都生一对兔子,小兔子长到第3月后每个月又生一对兔子。假设所有兔子都不死,编程求第20个月总数为多少? 难点:从第3月起,能生小兔子的大兔子每个月都要生一对兔子。

分析:

月 份

小兔子

中兔子

大兔子

兔子总数

1

1

0

0

1

2

0

1

0

1

3

1

0

1

2

4

1

1

1

3

5

2

1

2

5

6

3

2

3

8

7

5

3

5

13

8

8

5

8

21

9

13

8

13

34

10

21

2

21

55

11

34

2

34

89

此时可找出规律:每个月总数是前两个月总数之和

方法一

从第三个月开始计算。前面两个月兔子数量确定(n1;n2),后面每个月的兔子数量等于前两个月兔子数量之和。前一个月的兔子数n2;前两个月的兔子数n1;所以从第三个月开始(n),兔子数量为n=n1+n2。此后前两个月的数目进行更新向后移动一月,方便下一个循环。

void main ()

{

int i,n,n1=1,n2=1;

for(i=3;i<=20;i++)

{

n=n1+n2;//本月兔子的数目(第三月开始)

n1=n2;//n1指向后移一位

n2=n;//n2指向后移一位

printf("第%2d个月兔子总数为%4d个\n",i,n);

}

printf("第20个月兔子总数为%d个",n);

}

方法二

从第一个月开始循环,将第一个月的数量先存储起来k=f1,在将后面两个月的兔子数量更新。后面第一个月的兔子数改变为后面第二个月f1=f2,后面第二个月的兔子数为前两个月之和f2=f2+k(f1未改变时的值)。

#include int main()

{

long f1=1,f2=1,k;

int i;

for(i=1;i<=20;i++ )

{

k=f1;//第i个月的兔子个数

f1=f2;//后面一个月的兔子个数

f2=k+f2;//后面二个月的兔子个数

printf("第%2d月有%4ld只兔子;\n", i,k);

}

}

方法三

每个循环处理两个月。每次更新,第一个月是前两个月之和f1+f2,第二个月也是前两个月之和f2=f2+f1(此时f1已经改变)

int main( )

{

long f1=1,f2=1;

int i;

//每次循环确定2个月的兔子个数

for(i=1;i<=10;i++)

{

printf("第%2d月有%4ld只兔子;\n第%2d月有%4ld只兔子;\n",2*i-1,f1,2*i,f2);

f1=f1+f2;//第2n-1个月兔子数

f2=f2+f1;//第2n个月兔子数

}

}

规律:每个月总数是前两个月总数之和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值