oj2182: 寻找奶牛

题目要求
奶牛场有许多奶牛,农夫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;
}
发布了12 篇原创文章 · 获赞 2 · 访问量 188

猜你喜欢

转载自blog.csdn.net/qq_45891413/article/details/104543771
今日推荐