凉凉,第一题都没做出来,之后继续写了一下
感觉sort这里还是要加强,特别是用Collection来排序,以及lamba表达式
数字反转也弄了很久,可能时间不够,太紧张了。抗压还得锻炼
题目描述如下
小猪会生小猪,但是要成熟之后才会生,3年小猪就会成熟。并且小猪有自己的编号,从2开始,如下
2,3,4,5,7,9....
规律是f(n) = f(n-2) + f(n-3)
现在问,第m只小猪的编号是多少,并且是第几年生的(今年2019年)
此外,将小猪的编号反转,如114变为411,并且从大往小排序,得到第k个小猪的编号
三个数字已字符串的形式输出,中间以空格分隔
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
//BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.println(calculate(20, 3));
}
static String calculate(int m, int k) {
ArrayList<Pig> array = new ArrayList<Pig>();
Pig pig1 = new Pig();
pig1.key = 2;
pig1.age = 1;
pig1.sum = 1;
array.add(pig1);
Pig pig2 = new Pig();
pig2.key = 3;
pig2.age = 3;
pig2.sum = 2;
array.add(pig2);
int year = 2019;
int L = 2; //计算下一个编号
int M = 2;
int R = 3;
int sum = 2;
while(array.get(array.size() -1).sum < m) {
year ++; //到了下一年
int n = array.size();
for(int i = 0; i < n; i++) { //猪圈里的猪年龄都增加1
Pig tmp = array.get(i);
tmp.age ++;
}
for(int i = 0; i < n; i++) {
Pig tmp = array.get(i);
if(tmp.age >= 3) {
int index = L + M; //计算下一个编号
L = M;
M = R;
R = index; //更新
Pig p = new Pig();
p.key = index;
p.age = 1;
sum ++;
p.sum = sum;
array.add(p); //增加一只小猪
if(sum == m) {
break;
}
}
}
}
//编号反转
//System.out.println(array.get(array.size() - 1).key + " " + year);
for(int i = 0; i < array.size(); i++) {
int t = array.get(i).key;
ArrayList<Integer> list = new ArrayList<Integer>();
while(t > 0) {
list.add(t % 10);
t = t / 10;
}
int key_new = 0;
for(int j = 0; j < list.size(); j++) {
key_new = list.get(j) + key_new * 10;
}
array.get(i).key = key_new;
}
int key = array.get(array.size() - 1).key;
Collections.sort(array, (Pig o1, Pig o2) -> o2.key - o1.key);
return key + " " + year + " " + array.get(k).key;
}
}
class Pig{
int key; //编号
int age; //年龄
int sum; //属于第几只
}
1个小时的笔试时间,写完了猪圈的生成,还没有反转编号并且排序