题目描述
image.png
解题思路
这道题目当初做的时候没有拿满分,因为起初是使用C++的cout
来进行输出,而cout
在输出大数的时候会自动转换成科学技术法,需要进行额外的设置才能输出原本的数据。
cout.setf(ios::fixed);
同时还需要考虑到对输出的小数有限制,故需要再加上cout << setprecision(1) << mid;
来满足对中位数的输出。
综上,还是用printf更方便,并且速度还更快。
代码
#include <algorithm>
#include <iomanip>
#include <iostream>
using namespace std;
int main() {
int n, min, max, v;
double mid;
long long mid1, mid2;
bool isO;
cin >> n;
isO = n % 2;
for (int i = 0; i < n; i++) {
cin >> v;
if (isO) {
if (i == n / 2) {
mid = v;
}
} else {
if (i == n / 2 - 1) {
mid1 = v;
} else if (i == n / 2) {
mid2 = v;
}
}
if (i == 0) {
min = v;
}
if (i == n - 1) {
max = v;
}
}
if (min > max) {
swap(min, max);
}
cout << max << " ";
cout.setf(ios::fixed);
if (!isO) {
mid = (mid1 + mid2) / 2.0;
if ((mid1 + mid2) % 2) {
cout << setprecision(1) << mid;
} else {
cout << setprecision(0) << mid;
}
} else {
cout << setprecision(0) << mid;
}
cout << " " << min << endl;
return 0;
}