蓝桥杯第九天 2022 省赛 第 4 题 最少刷题数
太多坑了,考虑不全只能过50%,有两种特殊情况
public static void main(String[]args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int a[] = new int [100005];
int b[] = new int [100005];
for(int i =0;i<n;i++)
a[i] = scan.nextInt();
for(int i =0;i<n;i++)
b[i] = a[i];
Arrays.sort(a,0,n);
int mid = a[n/2];
int count = 0,count1 =0;
for(int i =0;i<n;i++) {
if(mid>a[i])
{
count1++;
}
else if(mid<a[i])
count++;
}
int index = 0;
if(count>count1)//如果比中位数大的数比较多
index = 1;//标记一下
else if(count1>count)//比中位数小的数比较多
index = 2;//标记一下
for(int i =0;i<n;i++)
{
if(i<n-1) {
if(b[i]<mid&&index!=2)//这种情况一般适用于没有重复mid数的情况
//比如 12 10 15 20 6
System.out.print(mid-b[i]+1+" ");
else if(b[i]<mid&&index==2) {
// 这种情况,0 不需要改成3 ,改成2就行了,自然不需要加1
//2 2 1 1 1 1 1 0 0 0
System.out.print(mid-b[i]+" ");
}
else if(b[i]==mid&&index==1)
//这种情况,也就是比mid大的数多余小的数(只有在一种情况下发生:mid重复),所有mid如果扫描到都需要+1
//0 0 1 1 1 1 1 2 2 2
System.out.print(1+" ");
else
System.out.print(0+" ");
}
//下面这个就是避免加空格,不是重点
else {
if(b[i]<mid&&index!=2)
System.out.print(mid-b[i]+1);
else if(b[i]<mid&&index==2) {
System.out.print(mid-b[i]);
}
else if(b[i]==mid&&index==1)
System.out.print(1);
else
System.out.print(0);
}
}
}