请教:用JAVA编程计算兔子数量问题?

请教:用JAVA编程计算兔子数量问题?,第1张

递归

int f1 = 1 //一个月大的兔子

int f2 = 1 //二个月大的兔子

int fn = 1 //兔子总数

for (int i = 3 i < 25 i++) {

fn = f1 + f2

f2 = f1

f1 = fn

System.out.println(i + "," + fn)

}

#include <stdio.h>

int main()

{

    int chickenNum, rabbitNum

    for( chickenNum = 0 chickenNum <= 40 chickenNum ++ )

    {

     for( rabbitNum = 0 rabbitNum <= 40 rabbitNum ++ )

     {

     if( chickenNum + rabbitNum == 40 && 2 * chickenNum + 4 * rabbitNum == 100 )

     {

     printf("鸡有%d只,兔有%d只\n", chickenNum, rabbitNum)

     return 0

     }

    }

    }

    return 0

}

有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

兔子的规律为数列:

1, 1, 2, 3, 5, 8, 13, 21 ....

下面使用了迭代、递归和数组三种解法。

【代码一】使用迭代:

#include <stdio.h>

int main()

{

    long f1=1, f2=1  // 兔子的数量 

    int i  // 循环次数 

    int n  // 要计算的月份

    

    printf("输入要计算的月数:")

    scanf("%d", &n)

    

    // 计算出循环次数 

    if(n%2==1){

        n = (n+1)/2

    }else{

        n = n/2

    }

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

        printf("第%d个月有%d只\n", i*2-1, f1)

        printf("第%d个月有%d只\n", i*2, f2)

    

        f1=f1+f2 /*前两个月加起来赋值给第三个月*/

        f2=f1+f2 /*前两个月加起来赋值给第三个月*/

    }

    return 0

}

运行结果:

输入要计算的月数:10

第1个月有1只

第2个月有1只

第3个月有2只

第4个月有3只

第5个月有5只

第6个月有8只

第7个月有13只

第8个月有21只

第9个月有34只

第10个月有55只

【方法二】使用递归:

#include<stdio.h>

int Feibonacci(int n){

    if(n==1||n==2)

        return 1

    else 

        return Feibonacci(n-1)+Feibonacci(n-2)

}

int main(){

    int n  // 要计算的月份 

 

    printf("输入要计算的月数:")

    scanf("%d", &n) 

    printf("%d个月的兔子总数为%d\n", n, Feibonacci(n))

    

    return 0

}

运行结果:

输入要计算的月数:10

10个月的兔子总数为55

递归看上去非常符合逻辑,但是这种递归效率是非常慢的,不信你计算20, 30, 40 个月的兔子数试试,明显比另外两种方法慢多了,具体分析请看:C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

【代码三】使用数组

#include<stdio.h>

void main()

{

    int a[100] ,i,n

    printf("请输入月数:")

    scanf("%d",&n)

    a[0]=a[1]=1

    for(i=2i<ni++)

        a[i]=a[i-1]+a[i-2]

    printf("第%d个月的兔子为:%d\n", n, a[n-1])

}

运行结果:

请输入月数:10

第10个月的兔子为:55


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存