输出的三个数分别为中位数,与中位数值相同的数字个数,可能成为中位数的数字的个数。
分成n为奇数和偶数讨论,奇数时中位数值只有一个,偶数时中位数可能有两个,可能成为中位数的是这两个值中间的数字个数。
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int n,i,a[1000024],k,n1,n2;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
k=(n-1)/2;
n1=0;n2=1;
if(n%2)
{
for(i=k;i>=0&&a[i]==a[k];i--)
n1++;
for(i=k+1;i<n&&a[i]==a[k];i++)
n1++;
}
else
{
for(i=k;i>=0&&a[i]==a[k];i--)
n1++;
for(i=k+1;i<n&&a[i]==a[k+1];i++)
n1++;
n2=a[k+1]-a[k]+1;
}
printf("%d %d %d\n",a[k],n1,n2);
}
return 0;
}