CCF计算机软件能力认证试题练习:201903-1 小中大

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wingrez/article/details/88676098

小中大

来源:CCF

标签:

参考资料:

相似题目:

背景

在数据分析中,最小值最大值以及中位数是常用的统计信息。

题目

老师给了你 n 个整数组成的测量数据,保证有序(可能为升序或降序),可能存在重复的数据。请统计出这组测量数据中的最大值、中位数以及最小值,并按照从大到小的顺序输出这三个数。

输入

从标准输入读入数据。
第一行输入一个整数 n,在第二行中存在 n 个有序的整数,表示测量数据,可能为升序或降序排列,可能存在连续多个整数相等,整数与整数之间使用空格隔开。

输出

输出到标准输出。
包含一行,包括最大值、中位数以及最小值共三个数,并按照从大到小的顺序输出。数据与数据之间使用空格隔开。对于整数请直接输出整数,对于可能出现的分数,请输出四舍五入保留 1 位小数的结果。

输入样例1

3
-1 2 4

输出样例1

4 2 -1

样例解释1

4 为最大值,2 为中位数,−1 为最小值。

输入样例2

4
-2 -1 3 4

输出样例2

4 1 -2

样例解释2

4 为最大值,(−1 + 3) ÷ 2=1 为中位数,−2 为最小值。

提示

在这里插入图片描述

参考代码(未测试)

#include<cstdio>

int n;
int mx,mn;
double mid;

int main(){
	scanf("%d",&n);
	
	int flag=n&1; //如果n为奇数,那么flag为1;如果n为偶数,那么flag为0。 
	int val;
	
	for(int i=0;i<n;i++){
		scanf("%d",&val);
		if(i==0){
			mn=val; //把第一个数暂且存入mn 
		}
		else if(i==n-1){
			mx=val; //把最后一个数暂且存入mx 
		}
		else if(i==n/2 && flag){
			mid=val;
		}
		else if((i==n/2-1 || i==n/2) && !flag){
			mid+=val/2.0;
		}
	}
	
	if(mx<mn){
		int t=mn;
		mn=mx;
		mx=t;
	}
	
	if((mid-(int)mid)==0){ //中位数为整数 
		printf("%d %d %d\n", mx,(int)mid, mn);
	}
	else{
		printf("%d %.1f %d\n",mx,mid,mn);
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wingrez/article/details/88676098