编程练习:头条校招题

编程练习:头条校招题

题目描述

头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队。每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来。在选题之前,我们对题目进行了盲审,并定出了每道题的难度系数。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a, b, c,我们希望这3道题能满足下列条件:
a < = b < = c ( 1 ) a<= b<= c(1) a=b=c1
b − a < = 10 ( 2 ) b - a<= 10(2) ba=102
c − b < = 10 ( 3 ) c - b<= 10 (3) cb=103
所有出题人一共出了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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值