CCF 201903-1 小中大

题目描述

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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容