0 效果
难点:四舍五入小数点一位,输出个数(整数输出整数,小数输出小数),情况分类
1 题目
2 思路
最大最小的数在输入的最开始和最后一个,
- 中位数:
- 当n为偶数时,是第一个n/2 - 1和n/2个数的平均数;
- 当n为奇数时,是第n/2个数
- 特殊情况:
- 当n为1时,三个数都为输入的第一个数;
3 代码
#include<cstdio>
#include<cmath>
#include<math.h>
#include<algorithm>
double ans[3] = {0.0};
bool cmp(const double& a, const double& b){
return a > b;
}
void print(){
std::sort(ans, ans + 3, cmp);
if(ans[0] - (int)ans[0] == 0){
printf("%.0f " , ans[0]);
}else{
printf("%.1f " , ans[0]);
}
if(ans[1] - (int)ans[1] == 0){
printf("%.0f " , ans[1]);
}else{
printf("%.1f " , ans[1]);
}
if(ans[2] - (int)ans[2] == 0){
printf("%.0f" , ans[2]);
}else{
printf("%.1f" , ans[2]);
}
}
int main(){
int n, tempMedianNum;
scanf("%d", &n);
for(int i = 0; i < n;i++){
double num;
scanf("%lf", &num);
if(i == 0){
ans[0] = num;
}else if(i == n -1){
ans[2] = num;
}
if(n % 2 != 0 && i == (n/2)){
ans[1] = num;
}else if(n % 2 == 0 && i == (n/2) - 1){
tempMedianNum = num;
}else if(n % 2 == 0 && i == (n/2)){
int sum = (int)num + (int)tempMedianNum;
if(sum % 2 == 0){
ans[1] = round((num + tempMedianNum)/2);
}else{
ans[1] = round(((num + tempMedianNum)/2)*10)/10;
}
}
}
if(n == 1){
printf("%.0f %.0f %.0f", ans[0], ans[0], ans[0]);
}else{
print();
}
return 0;
}