「csp模拟试题 201903-1」小中大 C/C++ 100分

316 阅读2分钟

目录

  • 题目
  • 输入输出样例
  • 题解思路
  • 题解源码(c/c++)

题目 :小中大

【问题描述】

老师给了你 n 个整数组成的测量数据,保证有序(可能为升序或降序),可能存在重复的数据。请统计出这组测量数据中的最大值、中位数以及最小值,并按照从大到小.的顺序输出这三个数。.

【输入格式】

从标准输入读入数据。

第一行输入一个整数 n,在第二行中存在 n 个有序的整数,表示测量数据,可能为升序或降序排列,可能存在连续多个整数相等,整数与整数之间使用空格隔开。

【输出格式】

输出到标准输出。

包含一行,包括最大值、中位数以及最小值共三个数,并按照从大到小的顺序输出。数据与数据之间使用空格隔开。对于整数请直接输出整数,对于可能出现的分数, 请输出四舍五入保留 1 位小数的结果。

输入输出样例

  • 输入样例1
3
-1 2 4
  • 输出样例1
4 2 -1

样例 1 解释

4 为最大值,2 为中位数,-1 为最小值。

  • 输入样例2
4
-2 -1 3 4
  • 输出样例2
4 1 -2

样例 2 解释

4 为最大值,(-1+3)÷2=为中位数,-2 为最小值。

【子任务】

题解思路

水题,直接判断即可。注意中位数的求法即可。中位数可能为整数或一位的小数。

题解(c/c++)

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin>>n;
    int max,min;
    int a[n+1];
    for (int i=0;i<n;i++){
        cin>>a[i];
    }
    max=a[0]>a[n-1]? a[0]:a[n-1];
    min=a[0]>a[n-1]? a[n-1]:a[0];
    cout<<max<<" ";
    if(n%2){
        cout<<a[n/2]<<" ";
    }
    else {
        if(a[n/2-1]%2==a[n/2]%2){
            cout<<(a[n/2-1]+a[n/2])/2<<" ";
        }
        else {
            cout<<(double)(a[n/2-1]+a[n/2])/2<<" ";
        }
    }
    cout<<min;
    return 0;
}