【CCF】小中大(C++)

输入:整数个数n,n个有序(从小到大或从大到小)整数
输出:从大到小输出最大数,中位数,最小数。中位数如果是小数要求四舍五入保留一位小数,如果是整数直接输出
AC代码

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    long n,min,max;
    double mid; 
    cin>>n;
    double a[n];
    for(long i=0;i<n;i++)cin>>a[i];
    //从小到大排序 
    if(a[0]<a[n-1]){
        min = a[0],max=a[n-1];
    }
    //从大到小排序 
    else if(a[0]>=a[n-1]){
        max = a[0],min=a[n-1];
    } 
    //总数是偶数,中位数=/2 
    if(n%2==0){
        mid = (a[(n/2)-1]+ a[n/2])/2;  
    }
    //奇数个,中位数最中间 
    else{
        mid = a[n/2];
    }
    if((int)mid!=mid&&int((mid+0.05)*10.0)!=int(mid*10.0)){ //四舍五入保留一位小数
        if(mid>=0)
        mid=((int)((mid+0.05)*10.0))/10.0;   
        else if(mid<0)
        mid=((int)((mid-0.05)*10.0))/10.0;   
    }
    cout<<max<<" ";
    if((int)mid!=mid)
    cout<<fixed<<setprecision(1)<<mid;  //输出格式保留一位小数
    else if((int)mid == mid)
    cout<<(int)mid;
    cout<<" "<<min;
    return 0;
 } 

注意事项(主要注意中位数):
1.中位数判断是否为整数,如果是整数强制转为int整型输出。
2.四舍五入保留1位小数方法:(double型数据a)

//五入
if(int((a+0.05)*10.0)!=int(a*10.0)){
    a=((a+0.05)*10.0)/10/0;
}
//四舍
else{
   a=(a*10.0)/10.0;
}
cout<<fixed<<setpresition(1)<<a;

注意要得到小数结果,式子中参与运算的数据一定要有小数。
全是整型数据得到的结果为整型。
int a = 3,b = 2;
doule result = a/b;
则result = 1;
double result = a/b*1.0;
则result = 1.5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章