学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
中位数是将一组数据按照从小到大的顺序排列(或者从大到小的顺序也可以)之后处在数列中点位置的数值,是典型的位置平均数,不受极端变量值的影响。
如果数列是奇数,中位数等于第 (n+1)/2个数;如果数列是偶数,中位数等于第 n/2 和 n/2+1 个数的平均数。
小猴最近刚好学习到中位数的相关知识,侯帅老师为了加强小猴对中位数的理解,特意给小猴出了一道简单题:
给定包含 n 个整数的数列 a1,a2,…,an,以及一个期望的中位数 x,小猴可以对数列进行若干次操作(也可以不进行操作),每次操作可以给数列中添加一个任意大小的整数。请问最少需要进行多少次操作,才能使得数列中包含奇数个整数,且 x 为该数列的中位数?
【输入】
第一行,包含两个整数 n,x。
第二行,包含 n 个整数 a1,a2,…,an。
【输出】
一行,包含一个整数,表示结果。
【输入样例】
4 3
6 4 7 1
【输出样例】
3
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, x, a, cnts, cntb, cntx;
int main()
{
cin >> n >> x;
for (int i=1; i<=n; i++) {
cin >> a;
if (a<x) cnts++;
else if (a>x) cntb++;
else cntx++;
}
if (cntx==0) cout << 1+abs(cnts-cntb) << endl;
else if (abs(cnts-cntb)>=(cntx-1)) {
cout << abs(cnts-cntb)-(cntx-1) << endl;
} else if ((cntx-1)>abs(cnts-cntb)) {
int cha = (cntx-1)-abs(cnts-cntb);
if (cha%2==0) cout << 0 << endl;
else cout << 1 << endl;
}
return 0;
}
【运行结果】
4 3
6 4 7 1
3