#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
int n;
cin >> n;
int num;
cin >> num;
int max = num, min = num, i = 1, mid_1 = num, mid_2 = num;
while(i++ < n){
cin >> num;
// 求出最小值
if(min > num){
min = num;
}else if(max < num){
// 求出最大值
max = num;
}
if(i == n/2){
mid_1 = num;
}else if(i == (n/2 + 1)){
mid_2 = num;
}
}
double mid;
// 求出中位数
if(n % 2 == 0){
mid = (double)(mid_1 + mid_2) / 2.0;// 有可能出现分数
if(mid - (int)mid != 0){
cout << max << ' ' << fixed << setprecision(1) << mid << ' ' << min << endl;
}else{
cout << max << ' ' << (int)mid << ' ' << min << endl;
}
}else{
cout << max << ' ' << mid_2 << ' ' << min << endl;
}
return 0;
}
之前代码贴错了,更新一下
小坑1:整数的判断,mid - (int)mid == 0
之前用的 mid - (int)mid > 0,忘记了负数的情况,直接用是否等于0来判断
小坑2:double类型在整数时的强转
mid是double类型,如果中位数算完是整数,cout中必须加上(int)mid来强转,不然得分只有90
小坑3:
在我写的这个算法中,只有两个数的时候,在while循环中,i 作为下标,取不到1,所以在mid_1和mid_2初始化时就把第一个数的值赋给他