本题最大值和最小值的输出较为简单;
中位数的输出需要注意:当n为偶数时,中位数可能会是分数,用中间两个数之和是否为偶数来判断中位数的情况。
//统计n个整数(有序可能重复)中的最大值、中位数、最小值。
//输入 n
//n个有序整数(有序可能重复,空格隔开)
//输出: 最大数、中位数、最小数(分数四舍五入保留一位小数)
#include<stdio.h>
int main()
{
int n,num[100000],i;
int max,mid,min;
scanf("%d",&n);
for( i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
//打破常规,借助数列有序来寻找最大最小值
if(num[0]<num[n-1]) //升序
{
max=num[n-1];
min=num[0];
}
else //包括两种情况
{
max=num[0];
min=num[n-1];
}
if(n%2!=0) //n为奇数,中位数为num[n/2]
{
mid=num[n/2];
printf("%d %d %d",max,mid,min);
}
else //n为偶数,中位数可能为整数,也可能为分数
{
mid=(num[n/2]+num[n/2-1]);
if (mid%2==0) //中位数为整数
{
mid=mid/2;
printf("%d %d %d",max,mid,min);
}
else
{
printf("%d %.1f %d",max,(float)mid/2,min); //强制转换
}
}
return 0;
}