18.12.09-C语⾔练习:兔⼦繁衍问题Fibonacci数列
题⽬:
问题解析:
这是典型的/Fibonacci 数列问题。具体这⾥不赘述。
问题中不论是初始的第1对兔⼦还是以后出⽣的⼩兔⼦都是从第3个⽉龄起每个⽉各⽣⼀对兔⼦。
c语言斐波那契数列
设n1,n2,n3分别是每个⽉1个⽉⽉龄,2个⽉⽉龄,⼤于等于3个⽉⽉龄的兔⼦数量。则下个⽉这三个类型⽉龄兔⼦数量分别是 n3, n1, n3+n2。
即:下个⽉1个⽉⽉龄兔⼦数量是上个⽉⼤于等于3个⽉⽉龄兔⼦的数量,2个⽉⽉龄兔⼦数量是上个⽉1
个⽉⽉龄兔⼦数量,⼤于等于3个⽉⽉龄兔⼦数量是上个⽉⼤于等于3个⽉⽉龄兔⼦数量加上上个⽉2个⽉⽉龄兔⼦数量。
程序:
1 #include <stdio.h>
2int main(void) {
3/*n1, n2, n3 分别是有1个⽉⽉龄,2个⽉⽉龄,3个⽉⽉龄的兔⼦数量*/
4int n1 = 1, n2 = 0, n3 = 0;
5/*total 是兔⼦总数量*/
6int total = 0;
7/* i 是⽉份, num是输⼊变量, t是中间变量 */
8int i=1, num, t;
9    printf("请输⼊数量:");
10    scanf("%d", &num);
11while(1){
12        total = n1 + n2 + n3;
13if(total >= num) break;
14/*求下个⽉兔⼦数量*/
15        i += 1;
16/*下⾯四⾏语句注意顺序不能混乱*/
17        t = n1;
18        n1 = n3 + n2;
19        n3 += n2;
20        n2 = t;
21    }
22    printf("所需⽉数:%d\n", i);
23return0;
24 }
程序执⾏结果:
问题表述中可能不严谨的地⽅:
1. 第⼀对兔“第3个⽉起”, 新⽣兔⼦“第3个⽉后”。不够严谨,因为⽉是⼀个时间段,应统⼀理解为“三个⽉后”。上述程序也是这么理解的。
2. “第⼏个⽉时兔⼦总数才可以达到n对?”。似乎有歧义:刚好达到n对还是⼤于等于n对。上述统⼀理解为“⼤于等于n对”。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。