c语言程序兔子反之问题,C语言解决兔子产子问题代码及解析
有一對(duì)兔子,從出生后的第3個(gè)月起每個(gè)月都生一對(duì)兔子。小兔子長(zhǎng)到第3個(gè)月后每個(gè)月又生一對(duì)兔子,假設(shè)所有的兔子都不死,問30個(gè)月內(nèi)每個(gè)月的兔子總數(shù)為多少?
問題分析
兔子數(shù)的規(guī)律,如下表所示:
月數(shù)
小兔子對(duì)數(shù)
中兔子對(duì)數(shù)
老兔子對(duì)數(shù)
兔子總數(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
提示:不滿1個(gè)月的兔子為小兔子,滿1個(gè)月不滿2個(gè)月的為中兔子,滿3個(gè)月以上的為老兔子。
可以看出,每個(gè)月的兔子總數(shù)依次為1, 1, 2, 3, 5, 8, 13…這就是Fibonacci數(shù)列。總結(jié)數(shù)列規(guī)律即從前兩個(gè)月的兔子數(shù)可以推出第3個(gè)月的兔子數(shù)。
算法設(shè)計(jì)
該題是典型的迭代循環(huán),即是一個(gè)不斷用新值取代變量的舊值,然后由變量舊值遞推出變量新值的過程。這種迭代與如下因素有關(guān):初值、迭代公式、迭代次數(shù)。經(jīng)過問題分析,算法可以描述為:
用C語言來描述迭代公式即為:
fib = fib1 + fib2
其中 fib 為當(dāng)前新求出的兔子數(shù),fib1為前一個(gè)月的兔子數(shù),fib2 中存放的是前兩個(gè)月的兔子數(shù),然后為下一次迭代做準(zhǔn)備,進(jìn)行如下的賦值 fib2=fib1,fibl=fib,要注意賦值的次序,迭代次數(shù)由循環(huán)變量控制,表示所求的月數(shù)。
下面是完整的代碼:
#include
int main()
{
long fib1=1, fib2=1, fib;
int i;
printf("%12ld%12ld", fib1, fib2); /*輸出第一個(gè)月和第二個(gè)月的兔子數(shù)*/
for(i=3; i<=30; i++)
{
fib = fib1 + fib2; /*迭代求出當(dāng)前月份的兔子數(shù)*/
printf("%12ld", fib); /*輸出當(dāng)前月份兔子數(shù)*/
if(i % 4 == 0)
printf("n"); /*每行輸出4個(gè)*/
fib2 = fib1; /*為下一次迭代作準(zhǔn)備,求出新的fib2*/
fib1 = fib; /*求出新的fib1*/
}
printf("n");
return 0;
}
運(yùn)行結(jié)果:
1 1 2 3
5 8 13 21
34 55 89 144
233 377 610 987
1597 2584 4181 6765
10946 17711 28657 46368
75025 121393 196418 317811
514229 832040
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新鏈接地址:https://www.linuxidc.com/Linux/2018-12/155896.htm
總結(jié)
以上是生活随笔為你收集整理的c语言程序兔子反之问题,C语言解决兔子产子问题代码及解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php源码安装配置,php源码安装时co
- 下一篇: dp28为什么叫大盘鸡?