给出一一串数字,问哪一个数字A可以使A和所有数字相减 的和最小。 输出的三个是:这个数是什么,给出的数字中满足的有几个,总共有几种数字可以满足(没出现也行)
其实就是把这些数字排序,中间那个数就是答案,如果数字是奇数个,那么答案肯定只有一个,就是中间那个数,给出的书中满足的有几个就遍历比较就行,
如果是偶数个,那么中间两个数字都行,两个数字之间的数也行,那么满足的数字的种数 就是中间两个数之间有多少数。
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1000005;
int num;
int res[N];
int main () {
int a,b,c;
while(cin >> num) {
b = c = 0;
for (int i = 0 ; i < num ;i++) {
cin >> res[i];
}
sort(res , res + num);
if (num % 2 == 0) {
int tar1 = res[(num / 2 ) - 1];
int tar2 = res[num / 2];
a = tar1;
int m1 = tar1 >= tar2 ? tar1 : tar2;
int m2 = tar1 <= tar2 ? tar1 : tar2;
for (int i = 0 ; i < num ;i++) {
if (res[i] >= m2 && res[i] <= m1) {
b++;
}
}
c = m1 - m2 + 1;
}
else {
int tar = res[num / 2];
c = 1;
a = tar;
for (int i = 0 ; i < num ;i++) {
if (res[i] == tar)
b++;
}
}
cout << a << " "<< b << " " << c << endl;
}
}