赛码网真题
头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队。每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来。在选题之前,我们对题目进行了盲审,并定出了每道题的难度系数。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a, b, c,我们希望这3道题能满足下列条件:
a<= b<= c
b - a<= 10
c - b<= 10
所有出题人一共出了n道开放性题目。现在我们想把这n道题分布到若干场考试中(1场或多场,每道题都必须使用且只能用一次),然而由于上述条件的限制,可能有一些考试没法凑够3道题,因此出题人就需要多出一些适当难度的题目来让每场考试都达到要求。然而我们出题已经出得很累了,你能计算出我们最少还需要再出几道题吗?
题解:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
int a = 0;
int b = 0;
int i = 0;
int j = 0;
int sum = 0;
int n = 1;
Scanner c = new Scanner(System.in);
a = c.nextInt();
ArrayList<Integer> q = new ArrayList<>() ;
for(i=0;i<a;i++){
b = c.nextInt();
q.add(b);
}
Collections.sort(q);
for(i=1;i<q.size();i++){
if(q.get(i) > q.get(i-1)+20){
if(n%3 == 0){
sum = sum + 2;
n = n+2;
}
else if(n%3 == 1){
sum = sum+ 1;
n = n + 1;
}
}
else if(q.get(i) > q.get(i-1)+10){
if(n%3 == 1 ){
sum = sum +1;
n=n+1;
}
else if(n%3 == 0){
sum = sum+1;
n = n+1;
}
}
n++;
}
if(n%3 == 1) sum = sum + 2;
else if(n%3 == 2) sum = sum + 1;
System.out.println(sum);
}
}
错题记:
给ArrayList排序, Collections.sort(q)。
时间上显著低于自己写的排序。