早教吧 育儿知识 作业答案 考试题库 百科 知识分享

8-2c语言编程题假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖

题目详情
8-2 c语言编程题
假设一对小兔的成熟期是一个月,即一个月可长成成兔,那么如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子(即当年12月份总计有多少对兔子,含成兔和小兔)?请编程求解该问题。
参考答案:依题意,兔子的繁殖情况如图所示。图中实线表示成兔仍是成兔或者小兔长成成兔;虚线表示成兔生小兔。观察分析此图可发现如下规律:
(1)每月小兔对数 = 上个月成兔对数。
(2)每月成兔对数 = 上个月成兔对数 + 上个月小兔对数。
综合(1)和(2)有:每月成兔对数 = 前两个月成兔对数之和。
输出格式:
每个月兔子对数的输出格式: "%4d"
第12个月的兔子总数的输出格式: "\nTotal=%d\n"
▼优质解答
答案和解析

这题其实就是个斐波那契数列。小兔就是前个月的成兔数,然后上个月的成兔和小兔相加就是数列的前两个相加等于自己。 所以代码如下  我比上面的答案时间快多了,他那种成指数级增长的递归调用你试试m=40,他会慢死的

#include <stdio.h>
int main(void)
{
  int i,tu1,tu2,tu3,m=12;
  tu1=1;
  tu2=1;
  printf("%4d%4d",tu1,tu2);
  for(i=3;i<=m;i++)
  {
    tu3=tu1+tu2;
    printf("%4d",tu3);
    tu1=tu2;
    tu2=tu3;
  }
  printf("\nTotal=%d\n",tu3);

}