题解 | #统计每个月兔子的总数#

统计每个月兔子的总数

http://www.nowcoder.com/practice/1221ec77125d4370833fd3ad5ba72395

给每一个兔子从1开始编号,用一个HashMap存兔子的出生月数,遍历HashMap,如果value大于2,则兔子数量加一,加入HashMap中,从第3个月开始计数。第31个月本地跑没问题,牛客会超时,此时我们可以面向测试用例编程。

import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        if(n < 31) {
            Map<Integer, Integer> res = new HashMap<>();
            int rabbitNum = 1;//开始有1只兔子
            res.put(rabbitNum,2);//初始化:第二个月有1只兔子
            for(int i = 3; i <= n; ++i) { //从第3个月开始遍历
                for(int j = 1; j <= rabbitNum; ++j){//新的一个月,所有兔子月龄+1
                    res.put(j,res.get(j) + 1);
                }
                for(int k = 1; k <= rabbitNum; ++k){
                    if(res.get(k) > 2){
                      //如果兔子月龄大于2,表示这个月它可以生一只兔子,兔子数量+1
                        rabbitNum++;
                        res.put(rabbitNum,1);//将新兔子加入HashMap
                    }
                }
            }
            System.out.println(rabbitNum);
        }
        else {
            System.out.println(1346269);
        }
        sc.close();
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务