题目大意:给出一系列的数字,要求求出中位数是
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
int num[1000000];
int main() {
int n,min,max,sum;
while(scanf("%d",&n) != EOF) {
for(int i = 0; i < n; i++)
scanf("%d",&num[i]);
sort(num,num+n);
if(n % 2) {
sum = 1;
min = num[n/2];
max = min;
}else{
sum = num[n/2] - num[n/2-1] + 1;
max = num[n/2];
min = num[n/2-1];
}
int count = 0;
for(int i = 0 ; i < n; i++){
if(num[i]>= min && num[i] <= max)
count++;
if(num[i] > max)
break;
}
printf("%d %d %d\n",min,count,sum);
}
return 0;
}
多少,以及能成为中位数的数有几个和中位数中间有几个值,如果数是奇数的话,中间那个以及和他想等的数都能成为中位数,如果时偶数个的话,取中间的两个,满足在他们两个数中间的数也能成为中位数
解题思路:先从小到大排列,就能快速找到中位数,再去判断能成为中位数的有几个