题目大意:
题解:
直接对于接收到的数据快排,再针对中位数情况讨论下就可以了。
AC代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//快排代码!!!
int partSort(int *a,int low,int high){
int pivot = a[low];
while(low < high){
while(low < high && pivot <= a[high]) high--;
a[low] = a[high];
while(low < high && pivot >= a[low]) low++;
a[high] = a[low];
}
a[low] = pivot;
return low;
}
void quickSort(int *a,int low,int high){
if(low < high){
int pivotIndex = partSort(a,low,high);
quickSort(a,pivotIndex+1,high);
quickSort(a,low,pivotIndex-1);
}
}
int main()
{
int n;
int num[10005];
int i;
float middle;
while(scanf("%d",&n)!=EOF){
if(n==0) break;
memset(num,0,sizeof(num));
for(i = 0;i < n;i++){
scanf("%d",&num[i]);
}
quickSort(num,0,i-1);
if(i%2==1){//证明i为偶数,总数记为奇数,中位数直接为最中间的数
printf("%d\n",num[(int)(i/2)]);
}else{//证明总数为偶数
middle = (num[(int)(i/2)-1]+num[((int)(i/2))])/2;
if(middle==(int)middle){//中位数是整数直接输出
int ans = (int)middle;
printf("%d\n",ans);
}else{//不是整数
printf("%d\n",num[(int)(i/2)-1]);
}
}
}
return 0;
}