输入:第一行为要输入的整数个数,第二行为一组有序整数(可能含相同数)
输出:最大 中位数 最小 (其中中位数不为整数时保留一位小数)
分析:用sort将数组排序(也可以根据升降序分类讨论)
难点在于中位数
- 整数除法用 “/”的话得到的是一个整数(得到小数的话自动去掉小数位只保留整数位)
- 两个数转化为double类型,再进行“/”除法
-
规定输出保留多少位小数,则用cout<<setprecision(2)<<fixed<<……;其中2表示保留多少位小数
-
或者cout<<setiosflags(ios::fixed)<<setprecision(0)<<a[n-1]
错误原因:将所有中位数强制保留一位小数,忽略了小数部分为0的情况,在随机测试了几组数据之后发现了问题,最后分情况讨论:if((mid - (int)mid) != 0)判断需不需要保留一位小数
#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; double a[n]; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); float mid; cout<<setiosflags(ios::fixed)<<setprecision(0)<<a[n-1]<<' '; if(n%2==0) { mid=(a[n/2]+a[n/2-1])/2; if((mid - (int)mid) != 0)cout<<setprecision(1)<<fixed<<mid; else cout<<setiosflags(ios::fixed)<<setprecision(0)<<mid; } else{mid=a[n/2];cout<<setiosflags(ios::fixed)<<setprecision(0)<<mid;} cout<<setiosflags(ios::fixed)<<setprecision(0)<<' '<<a[0]; return 0; }