1101 谁是中间那个
问题描述
一天,农夫乔恩像往常一样来到了他的农场,他突然对他的耐久产奶量产生了兴趣。他想知道产奶量处于中间那头奶牛的产奶量是多少。“处于中间”意思是说,其中有一半牛的产量比它多,另一半牛的产量比它少。
输入
仅包括一组测试数据,第一行一个正整数 N(1≤N≤10000),接下来 N 行,每行一个整数不会超过 1e6,第 i+1 行数字代表第 i 头牛的产量。
输出
处于中间的牛的产量
样例输入
5
1
2
4
5
3
样例输出
3
解题报告
sort( )排序:
函数原型sort (buffer,buffer+n,cmp); 其中,buffer位待排序数组的首地址;buffer+n为待排序数组中最后一个数据的最后一位;
cmp是自己定义的一个排序规则,返回值为true或false。
此程序中,sort函数要对结构体COW排序,排序规则位按照产奶量从小到大排序,若产奶量相同,则按牛的编号从大到小排序
程序如下:
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
using namespace std;
typedef struct
{
int MakeMilk;
int num;
}COW;
COW cow[10005];
bool cmp(COW A,COW B)
{
if(A.MakeMilk<B.MakeMilk)
return true;
if(A.MakeMilk==B.MakeMilk&&A.num>B.num)
return true;
return false;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&cow[i].MakeMilk);
cow[i].num=i;
}
sort(cow+1,cow+1+n,cmp);
printf("%d\n",cow[(n+1)/2].MakeMilk);
}
return 0;
}