POJ2388简单排序

Who's in the Middle
 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 41955 Accepted: 24264

Description

FJ is surveying his herd to find the most average cow. He wants to know how much milk this 'median' cow gives: half of the cows give as much or more than the median; half give as much or less.

Given an odd number of cows N (1 <= N < 10,000) and their milk output (1..1,000,000), find the median amount of milk given such that at least half the cows give the same amount of milk or more and at least half give the same or less.

Input

* Line 1: A single integer N

* Lines 2..N+1: Each line contains a single integer that is the milk output of one cow.

Output

* Line 1: A single integer that is the median milk output.

Sample Input

5
2
4
1
3
5

Sample Output

3

Hint

INPUT DETAILS:

Five cows with milk outputs of 1..5

OUTPUT DETAILS:

1 and 2 are below 3; 4 and 5 are above 3.

Source

这个题目是个排序的水题，因为题目给的数据全是整数，所以直接用库函数里的快排排个序就能解了。不过有一点要注意，n为偶数的时候，输出的数是中间两个的平均数。下面是我的代码

#include <stdio.h>
#include <stdlib.h>
#define MAXN 10005
int arr[MAXN];
int cmp(const void*a,const void*b)
{
return *(int *)a-*(int *)b;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0; i<n; i++)
scanf("%d",&arr[i]);
qsort(arr,n,sizeof(int),cmp);
if(n%2) printf("%d\n",arr[n/2]);
else printf("%.1lf\n",(arr[n/2-1]+arr[n/2])/2.0);
}
return 0;
}

一次AC，不过我在写博客的时候又发现了一个问题。如果n为偶数时，中间两个数都是奇数或者都是偶数的时候应该输出的是整数，而不像我写的那样，是出的是一位小数，那么又要加个判断语句，判断是否为整数。可能是题目的数据问题吧，还是我理解错了，不过能AC就对了。