c语言循环题兔子第三个月生,C语言·古典问题: 兔子总数
古典問(wèn)題: 兔子總數(shù)
題目:
有一對(duì)兔子,從出生第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第3月后每個(gè)月又生一對(duì)兔子。假設(shè)所有兔子都不死,編程求第20個(gè)月總數(shù)為多少? 難點(diǎn):從第3月起,能生小兔子的大兔子每個(gè)月都要生一對(duì)兔子。
分析:
月 份
小兔子
中兔子
大兔子
兔子總數(shù)
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
此時(shí)可找出規(guī)律:每個(gè)月總數(shù)是前兩個(gè)月總數(shù)之和
方法一
從第三個(gè)月開始計(jì)算。前面兩個(gè)月兔子數(shù)量確定(n1;n2),后面每個(gè)月的兔子數(shù)量等于前兩個(gè)月兔子數(shù)量之和。前一個(gè)月的兔子數(shù)n2;前兩個(gè)月的兔子數(shù)n1;所以從第三個(gè)月開始(n),兔子數(shù)量為n=n1+n2。此后前兩個(gè)月的數(shù)目進(jìn)行更新向后移動(dòng)一月,方便下一個(gè)循環(huán)。
void main ()
{
int i,n,n1=1,n2=1;
for(i=3;i<=20;i++)
{
n=n1+n2;//本月兔子的數(shù)目(第三月開始)
n1=n2;//n1指向后移一位
n2=n;//n2指向后移一位
printf("第%2d個(gè)月兔子總數(shù)為%4d個(gè)\n",i,n);
}
printf("第20個(gè)月兔子總數(shù)為%d個(gè)",n);
}
方法二
從第一個(gè)月開始循環(huán),將第一個(gè)月的數(shù)量先存儲(chǔ)起來(lái)k=f1,在將后面兩個(gè)月的兔子數(shù)量更新。后面第一個(gè)月的兔子數(shù)改變?yōu)楹竺娴诙€(gè)月f1=f2,后面第二個(gè)月的兔子數(shù)為前兩個(gè)月之和f2=f2+k(f1未改變時(shí)的值)。
#include int main()
{
long f1=1,f2=1,k;
int i;
for(i=1;i<=20;i++ )
{
k=f1;//第i個(gè)月的兔子個(gè)數(shù)
f1=f2;//后面一個(gè)月的兔子個(gè)數(shù)
f2=k+f2;//后面二個(gè)月的兔子個(gè)數(shù)
printf("第%2d月有%4ld只兔子;\n", i,k);
}
}
方法三
每個(gè)循環(huán)處理兩個(gè)月。每次更新,第一個(gè)月是前兩個(gè)月之和f1+f2,第二個(gè)月也是前兩個(gè)月之和f2=f2+f1(此時(shí)f1已經(jīng)改變)
int main( )
{
long f1=1,f2=1;
int i;
//每次循環(huán)確定2個(gè)月的兔子個(gè)數(shù)
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個(gè)月兔子數(shù)
f2=f2+f1;//第2n個(gè)月兔子數(shù)
}
}
規(guī)律:每個(gè)月總數(shù)是前兩個(gè)月總數(shù)之和
總結(jié)
以上是生活随笔為你收集整理的c语言循环题兔子第三个月生,C语言·古典问题: 兔子总数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 使用docker搭建xss挑战之旅环境
- 下一篇: OCM成长之旅