18.12.09-C语言练习:兔子繁衍问题 / Fibonacci 数列
題目:
問(wèn)題解析:
這是典型的/Fibonacci 數(shù)列問(wèn)題。具體這里不贅述。
問(wèn)題中不論是初始的第1對(duì)兔子還是以后出生的小兔子都是從第3個(gè)月齡起每個(gè)月各生一對(duì)兔子。
設(shè)n1,n2,n3分別是每個(gè)月1個(gè)月月齡,2個(gè)月月齡,大于等于3個(gè)月月齡的兔子數(shù)量。則下個(gè)月這三個(gè)類型月齡兔子數(shù)量分別是 n3, n1, n3+n2。
即:下個(gè)月1個(gè)月月齡兔子數(shù)量是上個(gè)月大于等于3個(gè)月月齡兔子的數(shù)量,2個(gè)月月齡兔子數(shù)量是上個(gè)月1個(gè)月月齡兔子數(shù)量,大于等于3個(gè)月月齡兔子數(shù)量是上個(gè)月大于等于3個(gè)月月齡兔子數(shù)量加上上個(gè)月2個(gè)月月齡兔子數(shù)量。
程序:
1 #include <stdio.h> 2 int main(void) { 3 /*n1, n2, n3 分別是有1個(gè)月月齡,2個(gè)月月齡,3個(gè)月月齡的兔子數(shù)量*/ 4 int n1 = 1, n2 = 0, n3 = 0; 5 /*total 是兔子總數(shù)量*/ 6 int total = 0; 7 /* i 是月份, num是輸入變量, t是中間變量 */ 8 int i=1, num, t; 9 printf("請(qǐng)輸入數(shù)量:"); 10 scanf("%d", &num); 11 while(1){ 12 total = n1 + n2 + n3; 13 if(total >= num) break; 14 /*求下個(gè)月兔子數(shù)量*/ 15 i += 1; 16 /*下面四行語(yǔ)句注意順序不能混亂*/ 17 t = n1; 18 n1 = n3 + n2; 19 n3 += n2; 20 n2 = t; 21 } 22 printf("所需月數(shù):%d\n", i); 23 return 0; 24 }程序執(zhí)行結(jié)果:
?
問(wèn)題表述中可能不嚴(yán)謹(jǐn)?shù)牡胤?#xff1a;
1. 第一對(duì)兔“第3個(gè)月起”, 新生兔子“第3個(gè)月后”。不夠嚴(yán)謹(jǐn),因?yàn)樵率且粋€(gè)時(shí)間段,應(yīng)統(tǒng)一理解為“三個(gè)月后”。上述程序也是這么理解的。
2. “第幾個(gè)月時(shí)兔子總數(shù)才可以達(dá)到n對(duì)?”。似乎有歧義:剛好達(dá)到n對(duì)還是大于等于n對(duì)。上述統(tǒng)一理解為“大于等于n對(duì)”。
?
轉(zhuǎn)載于:https://www.cnblogs.com/coder211/p/10091128.html
總結(jié)
以上是生活随笔為你收集整理的18.12.09-C语言练习:兔子繁衍问题 / Fibonacci 数列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: groovy使用范型的坑
- 下一篇: 典型用户分析及用户场景分析