zoukankan      html  css  js  c++  java
  • 18.12.09-C语言练习:兔子繁衍问题 / Fibonacci 数列

    题目:

    问题解析:

    这是典型的/Fibonacci 数列问题。具体这里不赘述。

    问题中不论是初始的第1对兔子还是以后出生的小兔子都是从第3个月龄起每个月各生一对兔子。

    设n1,n2,n3分别是每个月1个月月龄,2个月月龄,大于等于3个月月龄的兔子数量。则下个月这三个类型月龄兔子数量分别是 n3, n1, n3+n2。

    即:下个月1个月月龄兔子数量是上个月大于等于3个月月龄兔子的数量,2个月月龄兔子数量是上个月1个月月龄兔子数量,大于等于3个月月龄兔子数量是上个月大于等于3个月月龄兔子数量加上上个月2个月月龄兔子数量。

    程序:

     1 #include <stdio.h>
     2 int main(void) {
     3     /*n1, n2, n3 分别是有1个月月龄,2个月月龄,3个月月龄的兔子数量*/
     4     int n1 = 1, n2 = 0, n3 = 0;
     5     /*total 是兔子总数量*/
     6     int total = 0; 
     7     /* i 是月份, num是输入变量, t是中间变量 */
     8     int i=1, num, t;
     9     printf("请输入数量:");
    10     scanf("%d", &num);
    11     while(1){
    12         total = n1 + n2 + n3;
    13         if(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
    ", i);
    23     return 0;
    24 }

    程序执行结果:

    问题表述中可能不严谨的地方:

    1. 第一对兔“第3个月起”, 新生兔子“第3个月后”。不够严谨,因为月是一个时间段,应统一理解为“三个月后”。上述程序也是这么理解的。

    2. “第几个月时兔子总数才可以达到n对?”。似乎有歧义:刚好达到n对还是大于等于n对。上述统一理解为“大于等于n对”。

  • 相关阅读:
    SBT树
    WGS84、Web墨卡托、火星坐标、百度坐标互转
    Chord算法
    马尔科夫及隐含马尔科夫模型
    VirtualBox的四种网络连接方式
    匈牙利算法求解任务分配问题
    回溯与分支定界
    【Docker】docker安装mysql
    【RocketMQ】同一个项目中,同一个topic,可以存在多个消费者么?
    【Feign调用异常】org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported
  • 原文地址:https://www.cnblogs.com/coder211/p/10091128.html
Copyright © 2011-2022 走看看