【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

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