数羊问题

该博客讨论了一个关于羊群增长的数学问题,其中每个母羊在第二年和第四年各生育一次,第五年死亡。博主通过递归算法解决这个问题,给出了Java代码实现,用于计算在给定年限内羊圈中母羊的总数。尽管博主认为这是一个简单的题目,但在实际解题过程中遇到了困难。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题设:假设有N个母羊,每个羊在第二年可以生下一母羊,第四年可以生下一母羊,第五年时候羊死亡?问,在接下来的m年内,羊圈里总共有多少只母羊?

解题思路:N个母羊都是同一天开始生育的,也就是说我们只要算出一个母羊在M年内能生育多少并存活的数量SUM,就可以用N*SUM算出M年后有多少个羊;
题设给出,一个母羊可以存活五年,在存活周期的第二年可以生出一个母羊,而这第二个母羊也可以继续生育,也就是说分成了两份,而两份的生命周期改变了;同理第四年生的羊也可以这样考虑,只要考虑其生命周期就能得到想要的结果;

那岂不是说,生命周期小于等于m-3年内的羊,都可以产两子,而自己死亡;生命周期在m-3到m-1内的羊产一子,而自己不死亡;生命周期大于m-1的羊,不生育不死亡;

那么题解来了,递归就可以解决:
给出代码如下所示:

package writtenExamination;

import java.util.Scanner;

public class Main {
	// sum(1,m)从第一年开始,一个羊可以生育的羊数量总和
    private static int sum(int i, int m) { // i表示当前生命周期位数
        if (i <= m-3) { // 表示羊可以再生两个
            if (i + 4 <= m) return sum(i + 1) + sum(i + 3) - 1; // 减一表示这个羊死了
            return sum(i + 1) + sum(i + 3);
        } else if (i <= m - 1) { // 表示羊只能再生产一个,而且此羊还活着
            return sum(i + 1);
        } else { // 表示羊不能再生了,并且活着,把自己返回出去
            return 1;
        }
    }

    /**
     * 已知母羊在存活期间,可以产下两头幼崽
     *
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // 表示初始状态有n个羊
        int m = scanner.nextInt(); // 表示统计m年内,羊的数量
        scanner.close(); // 关闭写入流,一般人都不会关这个,但是这个是一个system.in的包装类,一般建议关了
        int sum = n * sum(1,m);
        System.out.println(sum);
    }
}

作者傻逼,这么简单的题竟然笔试的时候做错了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值