编程练习:头条校招题
题目描述
头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队。每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来。在选题之前,我们对题目进行了盲审,并定出了每道题的难度系数。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a, b, c,我们希望这3道题能满足下列条件:
a
<
=
b
<
=
c
(
1
)
a<= b<= c(1)
a<=b<=c(1)
b
−
a
<
=
10
(
2
)
b - a<= 10(2)
b−a<=10(2)
c
−
b
<
=
10
(
3
)
c - b<= 10 (3)
c−b<=10(3)
所有出题人一共出了n道开放性题目。现在我们想把这n道题分布到若干场考试中(1场或多场,每道题都必须使用且只能用一次),然而由于上述条件的限制,可能有一些考试没法凑够3道题,因此出题人就需要多出一些适当难度的题目来让每场考试都达到要求。然而我们出题已经出得很累了,你能计算出我们最少还需要再出几道题吗?
输入 输入的第一行包含一个整数n,表示目前已经出好的题目数量。 第二行给出每道题目的难度系数 d1, d2, …, dn。 | 样例输入 4 20 35 23 40 |
---|---|
输出 输出只包括一行,即所求的答案。 | 样例输出 2 |
题目分析:
首先按照从小到大对题目难度数组进行排序。从当前未选中的最小难度的题目 i i i进行组合成考题,若第 i + 1 i+1 i+1与 i i i个题目的难度不能满足 ( 2 ) (2) (2),则说明第 i + 1 i+1 i+1以及 i + 2 , . . . i+2,... i+2,...题目不能和第 i i i个题目组成一套题目,即没有题目可以和第 i i i个题目组合成考题。因此,可以计算第 i i i个题目所在题目组所需要另外添加的题目数量。迭代上述过程即可计算出所需要添加的题目数量。
代码实现:
Java语言实现的题目解答
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if(n == 0){
System.out.print(3);
return;
}else if(n==1){
System.out.print(2);
return;
}
int[] score = new int[n];
for(int i = 0; i< n; i ++){
int tmp = sc.nextInt();
score[i]=tmp;
}
Arrays.sort(score);
int t = 1;
int count = 0;
for(int i = 1; i <score.length; i++){
if(score[i]-score[i-1]<=10&&t<3){
t++;
}else{
count = count + (3 - t);
t = 1;
}
}
count = count + (3-t);
System.out.print(count);
}
}