这题虽然很简单,但一定要仔细啊~
题目描述
题意分析
输入:有序整数列(不用遍历整个数组,只需比较前面和后面的数值大小,即可得最大值和最小值,根据输入的n是奇数还是偶数来采用不同的方法求中位数)
n<=10^5,输入整数数量不超过100000个(注意申请合适的数组空间)
输出:大中小(不要弄错顺序)
错误示例
20分
用%.1lf 实现 保留一位小数。
但是只保留了一位小数但没有实现四舍五入。原因是计算中位数时出错
mid=(a[n/2-1]+a[n/2])/2;
a[n/2-1]+a[n/2]为整数,除2之后还是整数,然后再转化为浮点型赋给mid,故在除2后得到的只是整数部分传给mid,并没有将完整的结果传过去。因此应该先将a[n/2-1]+a[n/2]传给mid,再讲mid除2。
#include<iostream>
#include<iomanip>
int main() {
int n, min,max;
double mid;
int a[100000];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
if(a[0]>a[n-1])
{
min=a[n-1];
max=a[0];
}
else
{
min=a[0];
max=a[n-1];
}
if(n%2==0)
{
mid=(a[n/2-1]+a[n/2])/2;
pintf("%d %.1lf %d",max,mid,min);
}
else
{
mid=a[n/2];
printf("%d %.lf %d",max,mid,min);
}
return 0;
}
70分
没有判断当n为偶数时,输出中位数为整数的情况。
#include<iostream>
#include<iomanip>
int main(