笔试无法a的题,是我脑回路太清奇?大神救救孩子~
先上题:母牛从3-7岁初,每年会生产一头小母牛,10岁后死亡(10岁任然存活),假设初始有一头刚出生的母牛,请问第n年有多少头母牛?(年从第一年开始计数)
注:第三年初会出生 第一头母牛,故第三年有两头母牛
第五年初,第三年出生的母牛会生产,故第五年有五头母牛
岁数是虚数
示例:
|
输入 |
输出 |
|
2 |
1 |
|
3 |
2 |
|
4 |
3 |
|
5 |
5 |
|
12 |
123 |
🤣🤣🤣我感觉我写的还行啊,为什么输入12输出的不是123,其他示例都对的呀,嘤嘤嘤
白痴不配a这道题吗😭😭😭😭😭😭
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int year = scan.nextInt();
/**
* 数组里放入每一头牛的岁数,
* 方便在3-7岁生牛,和10岁死亡
* 第一年先赋值一头1岁的牛
*/
int [] age = {1};
//按照输入的年份循环,每一年进行计算
for(int i =0;i<year ; i++){
//每年,先把每头牛的岁数+1,大于十岁的牛牛从数组去掉
age = increase(age);
//前面岁数+1后,计算牛牛岁数3-7的个数,按照个数增加岁数为1的牛进数组
age = birth(age);
}
//你知道为什么都比结果大1,所以就减去1。。。。。。
System.out.println(age.length-1);
}
public static int[] birth(int [] age){
//找出年龄3-7牛牛的个数
int num = 0;
for(int i = 0 ; i < age.length ; i++){
if(age[i] >= 3 && age[i] <= 7){
num++;
}
}
//在新数组中加上新生,年龄为1的小牛牛
int[] newAge = new int [age.length+num];
for(int i = 0 ; i < age.length ; i++){
newAge[i] = age[i] + 1;
}
for(int j=0 ; j < num ; j++){
newAge[age.length+j] = 1;
}
return newAge;
}
public static int[] increase(int[] age){
//每头牛的岁数+1,放进新的数组里
int[] newAge = new int [age.length];
for(int i = 0 ; i < age.length ; i++){
newAge[i] = age[i] + 1;
}
//计算大于10岁的牛的个数
int death = 0;
for(int i = 0 ; i < newAge.length ; i++){
if(newAge[i] > 10){
death++;
}
}
//因为小的在后面,所以大于10的在前面,就把前面大于10岁的牛从数组删除
int[] newnew = new int[newAge.length-death];
for(int i = 0 ; i < newnew.length ; i++){
newnew[i] = newAge[death+i];
}
return newnew;
}
}

