题解 | #统计每个月兔子的总数#
统计每个月兔子的总数
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();
}
}