这题主要是求中位数,和中位数相等的数字的个数,和中位数等价的数字的个数。
一个数列中,找一个数字,使得数列中所有数字到这个数的距离和最小,这个数就是中位数。
具体看代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<string>
#include<set>
#include<map>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn=1e6+10;
const double eps=1e-8;
int a[maxn];
int main()
{
int n;
while(cin>>n)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
int mnum,tnum=0,snum=0;
if(n%2)
{
int tem=n/2+1;
mnum=a[tem];
for(int i=tem;a[i]==a[tem]&&i>0;i--) tnum++;
for(int i=tem+1;a[i]==a[tem]&&i<=n;i++) tnum++;
snum=1;
}
else
{
int tem=n/2;
mnum=a[tem];
for(int i=tem;a[i]==a[tem]&&i>0;i--) tnum++;
for(int i=tem+1;a[i]==a[tem+1]&&i<=n;i++) tnum++;
snum=a[tem+1]-a[tem]+1;
}
cout<<mnum<<' '<<tnum<<' '<<snum<<endl;
}
return 0;
}