问题描述
试题编号: | 201903-1 |
试题名称: | 小中大 |
时间限制: | 1.0s |
内存限制: | 512.0MB |
问题 |
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);
int i = 0;
int j = 0;
int t = 0;
int max = 0;
int min = 0;
int arr[100000];
int mid;
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
//从小到大排列
if (arr[0] >= arr[n - 1])
{
max = arr[0];
min = arr[n-1];
}
else
{
max = arr[n-1];
min = arr[0];
}
if (n % 2 == 0)
{
mid = (arr[(n / 2) - 1] + arr[n / 2]) / 2.0;
if ((arr[(n / 2) - 1] + arr[n / 2]) % 2 == 1)//和为奇数
{
printf("%d %.1lf %d", max, double((arr[(n / 2) - 1] + arr[n / 2]) / 2.0), min);
}
else
{
printf("%d %d %d", max, mid, min);
}
}
else
{
printf("%d %d %d", max, arr[n / 2], min);
}
return 0;
}
天知道我写了多少遍,看错题目了,以为要先排序,再算,后来发现是有序数组。。。然后用C语言的编译环境会出错,用c++的会通过。
有序数组的话,只需要先定义max,min,然后比较头和尾的两个数字就可以了。就是遇到如果是分数,四舍五入这里遇到了一点困难,我先开始是定义的float mid,但是发现一直编译错误,用double就是对的,然后我用mid*10%10 == 0来判断是否是整数,如果等于0的话就是整数,不等于零,就是小数,我这里的想法其实有点复杂,后来看了博主写的,判断arr[n/2-1]+arr[n/2]的和是奇数偶数的方法来做就比较容易。