阿里实习笔试

凉凉,第一题都没做出来,之后继续写了一下

感觉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 array = new ArrayList();
		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 list = new ArrayList();
			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个小时的笔试时间,写完了猪圈的生成,还没有反转编号并且排序

你可能感兴趣的:(阿里实习笔试)