解题思路
一开始的想法是读入之后直接排序,那么就自然是最小次小次大最大,只过了50%的数据,错在是没考虑到数字重复的问题,最后是设置了四个变量,分成最大组和最小组,最大组一开始都赋值成,从数组末尾到起始遍历,若能遇到不等于最大的值,那么第一次遇到的就是次大,赋值后跳出,找次小的思路是一样的。
后来想到了去重函数,但是使用去重函数就要讨论读入的数列去重后的数字个数,代码结构上也不算简便就没有使用。
通过代码
#include<bits/stdc++.h>
using namespace std;
int a[110] = {};
int main(){
int n;
cin>>n;
for(int i = 0; i < n; i++)
cin>>a[i];
sort(a,a+n);
int amax1,amin1,amax2,amin2;
amax1 = a[n-1];
amax2 = a[n-1];
amin1 = a[0];
amin2 = a[0];
for(int i = n-2; i >= 0; i--){
if(a[i] != amax2){
amax2 = a[i];
break;
}
}
for(int i = 1; i <= n - 1; i++){
if(a[i] != amin2){
amin2 = a[i];
break;
}
}
cout<<amax1 - amax2<<" "<<amax1 - amin2<<" ";
cout<<amax2 - amin2<<" "<<amax2 - amin1<<endl;
return 0;
}