CCF真题:201903-1大中小 100分

大中小

题目

在这里插入图片描述
在这里插入图片描述

参考代码

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
    int n,k;
    int max,min;
    double mid;
    cin>>n;
    int *arr = new int [n];
    for (int i=0;i<n;i++){
        cin>>arr[i];
    }
    if(arr[0]>arr[n-1]){
        max = arr[0];
        min = arr[n-1];
    }
    else{
        max = arr[n-1];
        min = arr[0];
    }
    if(n%2==0){
        k = n/2;
        mid = (arr[k]+arr[k-1])*1.0/2;
    }else{
        k = n/2;
        mid = arr[k];
    }
    cout.setf(ios::fixed,ios::floatfield);//十进制计数法,不是科学计数法
    cout<<max<<" ";
    if(mid-(int)mid == 0)//判断mid是否为整数
        cout<<(int)mid<<" ";
    else
        cout<<setprecision(1)<<mid<<" ";
    cout<<min<<endl;
}

/*
测试用例:
3
-1 2 4

4
-2 -1 4 4
*/

【注意及总结】
1、下面这一段是防止数字太大,double类型会自动使用科学计数法(如:1.5E6等)输出,不满足题目格式,亲测没有这个格式控制会扣15分;

cout.setf(ios::fixed,ios::floatfield);//十进制计数法,不是科学计数法

2、下面这一段是保证中位数四舍五入保留一位小数

if(mid-(int)mid == 0)//判断mid是否为整数
        cout<<(int)mid<<" ";
    else
        cout<<setprecision(1)<<mid<<" ";

3、就是注意输入的数据都是定义为int类型,但是中位数定义为double类型。

发布了34 篇原创文章 · 获赞 7 · 访问量 2216

猜你喜欢

转载自blog.csdn.net/qq_37717494/article/details/103959677