HDOJ 1157 Who's in the Middle

简介: Problem 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...

Problem 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.

一道求中位数的简单题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<iostream>

#include<algorithm>

using namespace std;
bool cmp(int a,int b){
    return a>b;
}//从大到小排序;

int main(){
    int n;
    while(scanf("%d",&n)==1){
    int i,j,arr[10005];
    for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
    }
         sort(arr,arr+n,cmp);
    printf("%d\n",arr[(n-1)/2]);
    }
    return 0;
}

下面用快排做:

/**#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<iostream>

#include<algorithm>

using namespace std;
bool cmp(int a,int b){
    return a>b;
}//从大到小排序;

int main(){
    int n;
    while(scanf("%d",&n)==1){
    int i,j,arr[10005];
    for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
    }
         sort(arr,arr+n,cmp);
    printf("%d\n",arr[(n-1)/2]);
    }
    return 0;
}
**/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<iostream>

#include<algorithm>

using namespace std;
int cmp(const void *x,const void *y){
    return (*(int *)x-*(int *)y);//从小到大
   /** return (*(int *)y-*(int *)x);//从大到小**/
}

int main(){
    int n;
    while(scanf("%d",&n)==1){
    int i,j,arr[10005];
    for(i=0;i<n;i++){
        scanf("%d",&arr[i]);
    }
         qsort(arr,n,sizeof(int),cmp);
       /**  for(int i=0;i<n;i++){
            printf("%d\n",arr[i]);
         }**/
    printf("%d\n",arr[(n-1)/2]);
    }
    return 0;
}

目录
相关文章
hdoj 4706 Children's Day
题目意思就是用a-z组成一个N,然后到z后又跳回a,输出宽从3到10的N。
57 0
|
算法
第K小数 uva 10041 - Vito's Family poj 2388 Who's in the Middle
了解快排的人对int (int l, int r) 这个函数很熟悉,因为这是在快排中用到的,它的作用是对数组的某一段选一个分界点,使得该点左边的数都不大于该点的数,右边的点不小于该点的数,也就是说我们通过一次调用这个函数确定一个数的位置,快排是将该点两边分别进行递归操作,时间复杂度为O(nlogn),而select只是对一边进行递归操作(有点像二分的递归形式),所以时间复杂度仅为O(n)。
46 0
HDOJ 1326 Box of Bricks(简单题)
HDOJ 1326 Box of Bricks(简单题)
120 0
HDOJ 1326 Box of Bricks(简单题)
HDOJ 1391 Number Steps(打表DP)
HDOJ 1391 Number Steps(打表DP)
137 0
HDOJ 1391 Number Steps(打表DP)
HDOJ(HDU) 2088 Box of Bricks(平均值)
HDOJ(HDU) 2088 Box of Bricks(平均值)
96 0
HDOJ(HDU) 2088 Box of Bricks(平均值)
HDOJ 1157 Who's in the Middle
HDOJ 1157 Who's in the Middle
97 0
HDOJ 1194 Beat the Spread!(简单题)
HDOJ 1194 Beat the Spread!(简单题)
136 0
|
机器学习/深度学习
HDOJ/HDU 1556 Color the ball(树状数组)
HDOJ/HDU 1556 Color the ball(树状数组)
107 0
HDOJ(HDU) 2401 Baskets of Gold Coins(数列、)
HDOJ(HDU) 2401 Baskets of Gold Coins(数列、)
87 0
HDOJ 2131 Probability
HDOJ 2131 Probability
103 0