题目要求
奶牛场有许多奶牛,农夫Alice,每天都会为奶牛挤奶,但是这些奶牛的产奶量是不相同,每头奶牛都有唯一的编号,现在农夫Alice想找到它们之中产奶量为中位数的奶牛的编号,如果产奶量一样,输出编号较小的奶牛的编号 .
Input
第一行T表示测试组数
第二行m表示奶牛头数,这里保证m是奇数,m<=1500
接下来m行每行两个整数id, milk 表示奶牛的id和产奶量(保证每个id不相同,且产奶量<=10000)
Output
输出产奶量为所有奶牛中中间值的奶牛的编号.如果产奶量一样,输出编号较小的奶牛的编号,每组测试数据间输出一个空行.
Sample Input
Raw
3
3
1 2
2 2
3 2
3
1 2
2 3
3 4
5
1 1
2 1
3 1
4 2
5 2
Sample Output
Raw
1
2
1
Hint
这里的中位数,是指所有奶牛中,产量恰好在排在中间的奶牛的产量
凑数题目了。
先将数据放入结构体中,按奶量进行冒泡排序,找出中间的哪一个。、
最后输出与中间数据相同但是id更小的那个。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct nums
{
int id, milk;
}num[1600];
int main()
{
int m, n,a;
scanf("%d", &m);
nums t;
while (m--)
{
memset(num, 0, sizeof(num));
scanf("%d", &n);
for(int i=0;i<n;i++)
scanf("%d %d", &num[i].id,&num[i].milk);
for (int j = 0; j < n - 1; j++)
{
for (int i = j + 1; i < n; i++)
if (num[i].milk < num[j].milk)
{
t = num[i];
num[i] = num[j];
num[j] = t;
}
}
a = num[(n - 1) / 2].id;
for (int i = 0; i < n; i++)
{
if (num[i].milk == num[(n - 1) / 2].milk && num[i].id < num[(n - 1) / 2].id)
{
a = num[i].id;
break;
}
}
printf("%d\n", a);
printf("\n");
}
return 0;
}