该题比较简单,因为所给数据都是排好序的了,对于最大值与最小值我们只需判断第一个元素与最后一个元素的关系即可,而中位数的判断则与n的大小有关,如果n为偶数(下标从1开始),那么中间会存在两个数,此时中位数的计算是该两个数相加后除2,如果n为奇数,那么中位数就是中间那一个数,对于前者而言,我们需要多加一个判断中位数是否为整数,因为此时中位数可能为小数,且题目要求如果是小数需要保留1位小数,反之则直接输出整数,
这里我们借助floor()向下取整函数进行判断
如果floor(mid+0.5)==mid则为整数,反之为小数
最后还需要对得到的三个数按照从大到小排序即可
#include<iostream> #include<cmath> #include<iomanip> using namespace std; int maxn,minn,n; int arr[100005]; double mid; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>arr[i]; } if(arr[1]<arr[n]){ minn=arr[1]; maxn=arr[n]; }else{ minn=arr[n]; maxn=arr[1]; } if(n%2==0){ double temp1=arr[n/2],temp2=arr[n/2+1];; mid=(temp1+temp2)/2; }else{ mid=arr[n/2+1]; } if(maxn<mid){ double temp=maxn; maxn=mid; mid=temp; } if(mid<minn){ double temp=mid; mid=minn; minn=temp; } cout<<maxn<<" "; if(floor(mid+0.5)==mid){ cout<<fixed<<setprecision(0)<<mid<<" "; }else{ cout<<fixed<<setprecision(1)<<mid<<" "; } cout<<minn<<endl; return 0; }