试题:
代码:
没有测试用例用来测,如果uu们发现下面代码有问题,欢迎评论区指正。
import java.util.Arrays;
import java.util.Scanner;
//蓝桥
public class 省赛最少刷题数 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] nums = new int[n];
int[] tmp = new int[n];
for(int i = 0; i < n; ++i) {
nums[i] = scanner.nextInt();
tmp[i] = nums[i];
}
int midvalue = 0; //存储中间值
int leftmin = 0; //存储比中间值数量小的数量
int rightmax = 0; //存储比中间值大的数量
Arrays.sort(tmp);
midvalue = tmp[n / 2];
for(int i = 0; i < tmp.length; ++i) {
//计算比中间值小的数数量,和,比中间值数量大的数量。
if(tmp[i] < midvalue) {
++ leftmin;
}
if(tmp[i] > midvalue) {
++ rightmax;
}
}
//根据大于中间值的数量和小于中间值的数量,决定差值的计算。
for(int i = 0; i < nums.length; ++i) {
if(nums[i] >= midvalue) {
if(i == 0) {
System.out.print(0);
}else {
System.out.print(" " + 0);
}
}else {
if((leftmin - 1) == rightmax || (leftmin - 1) > rightmax) {
if(i == 0) {
System.out.print(midvalue - nums[i]);
}else {
System.out.print(" " + (midvalue - nums[i]));
}
}else {
if(i == 0) {
System.out.print(midvalue - nums[i] + 1);
}else {
System.out.print(" " + (midvalue - nums[i] + 1));
}
}
}
}
}
}