时间限制: 1.0s 内存限制: 512.0MB 本题总分:10 分
【问题描述】
小蓝老师教的编程课有 N 名学生,编号依次是 1 . . . N。第 i 号学生这学期刷题的数量是 。
对于每一名学生,请你计算他至少还要再刷多少道题,才能使得全班刷题比他多的学生数不 超过刷题比他少的学生数。
【输入格式】
第一行包含一个正整数 N。
第二行包含 N 个整数: ,. . . ,
.
【输出格式】
输出 N 个整数,依次表示第 1 . . . N 号学生分别至少还要再刷多少道题。
【样例输入】
5
12 10 15 20 6
【样例输出】
0 3 0 0 7
【评测用例规模与约定】
对于 30% 的数据,1 ≤ N ≤ 1000, 0 ≤ ≤ 1000.
对于 100% 的数据,1 ≤ N ≤ 100000, 0 ≤ ≤ 100000.
解题思路:
复制一个数组,利用sort函数排序找到中间项,利用中间项进行比较。
解题代码:
package lnaqiao;
import java.util.Arrays;
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=Integer.parseInt(sc.nextLine());
int nums[]=new int [n];
int numscopy[]=new int [n];
for(int i=0;i<n;i++) {
nums[i]=sc.nextInt();
numscopy[i]=nums[i];
}
int index=0;
if(n%2==0)
index=n/2+1;
else
index=n/2;
Arrays.sort(numscopy);
int middle=numscopy[index];
int answer[]=new int [n];
for(int i=0;i<n;i++) {
answer[i]=(middle-nums[i])<=0?0:middle-nums[i]+1;
}
for(int i=0;i<n;i++) {
System.out.print(answer[i]+" ");
}
}
}
解题结果: