您的位置:首页 > 其它

uva10057

2015-12-26 21:09 113 查看
题目大意:

求中位数

思路:

如果是奇数个 ,中位数只有一个,找到与中位数相等的都可以,

如果是偶数个,中位数有两个,找到与这两个相等的都可以。

代码:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: