小中大( 201903-1/CCF)———附带思路和完整代码

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;
}
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页