题目大意:
求中位数
思路:
如果是奇数个 ,中位数只有一个,找到与中位数相等的都可以,
如果是偶数个,中位数有两个,找到与这两个相等的都可以。
代码:
#include <iostream>
using namespace std;
#include <stdio.h>
#include <cstring>
#include <algorithm>
const int MAXN = 1000000;
int n,num[MAXN],n1,n2;
int main() {
while(scanf("%d",&n)!=EOF) {
for(int i = 0 ; i < n ;i++)
scanf("%d",&num[i]);
int k = (n - 1)/2 ;
int n1 = 0 , n2 = 1;
sort(num,num+n);
if(n%2) { // 奇数个
for(int i = k; i >=0 && num[k] == num[i]; i--)
n1 ++;
for(int i = k +1 ; i < n && num[k] == num[i]; i++)
n1 ++ ;
}
else {
for(int i = k ; i >= 0 && num[k] == num[i]; i--) {
n1 ++;
}
for(int i = k+1; i < n && num[k+1] == num[i] ; i++ )
n1 ++;
n2 = num[k+1] - num[k] + 1;
}
printf("%d %d %d\n",num[k],n1,n2);
}
return 0;
}