C语言编程题目 兔子繁衍问题?

C语言编程题目 兔子繁衍问题?,第1张

方法一、用递归。

方法二、把兔子定义成结构,每个兔核液子自带计时器变量,繁殖就是新建节点,构建结构链表。每次拿氏仿循环遍历所有节点的计时变量大于3的就新建一个节点插入链表。最后统计节点数量。

我用方法1来写:

#include <stdio.h>

int childbirth(int bMth,int gMth)//bMth:调用时传0,gMth:经过的最大月数

{

  int cnt=0,n=bMth,num=2

  while(n++<gMth+1)

      if(cnt++>2)

          num=num+childbirth(n,gMth+1)

  return num

}

int main()

{

  int i,n

  printf("请输入经过多少月:"),scanf("%d",&消纤n)

  for(i=1i<=ni++)

      printf("经过%d个月后:兔子数量为:%d\n",i,childbirth(0,i))

  return 0

}

思路不要乱。这个月的兔子只有两个来源,一个来源是上个月的老兔子,另一个来源是这个月刚出生的兔子,而这个月刚出生的兔子,就是两个月前的所有兔子,因为两个月前的所有兔子,无论两个月前就是老的,此纤还是两个月前刚生的,到了这个月就全部具有生育能力,每只都可以下一对儿,所以可以得到一个递推关系f(n) = f(n - 1) + f(n - 2)。那么程序自然是

long fun(int month)

{

    if(month == 1 || month == 2)

        return 1

    else

        return fun(month - 1) + fun(month -2)

}

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。

int main()

    int Mon

    long Num

    scanf("%d",&Mon)

  森此仿  Num = fun(Mon)

    printf("第%d月共有兔扒握子%ld只\n",Mon,Num) 

    return 0 

}

至于你的程序,很难把它改正确,因为这题压根不是那个思路,那样想会越想越乱的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8238491.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存