0
点赞
收藏
分享

微信扫一扫

CSP 201903-1 小中大


一、题目

CSP 201903-1 小中大_中位数

二、坑点

  1. 注意一下N=0和N=1的特殊情况
  2. 四舍五入的写法
  1. 利用cmath.h中的round函数保留一位小数​​round(mid*10)/10.0​
  2. 利用运算符性质保留一位小数​​(int)(x*10)/10.0​
  3. 这个题实际上小数位只可能是0.5,直接输出一位精度也可以的
  1. 输出格式:注意中位数可能是整数或小数,输出必须分开写才能满足要求
  • 如果以整数形式输出一个double数,必须强制转int型,否则不能满分​​cout<<(int)mid​
  • 最好还是用C语言的标准输入输出写法

三、代码

  • C/C++

//cmath.h中round(x)函数,对x进行四舍五入 ,保留一位小数round(mid*10)/10.0
//printf()输出浮点数自动四舍五入
//printf("")中,类型符号和变量类型必须对应

//坑点在中位数:数据为奇数个时为最中间的数,否则为最中间的两个数的算数平均数。
//不过还要注意的是在第二种情况下又要分两种情况考虑。一种是计算结果为整数要按照整数输出,另一种是计算结果为小数,需要按保留一位小数的结果输出。
//还要注意 N==0 || N==1的情况

#include <iostream>
#include<cmath>
using namespace std;

int data[1000000];
int main()
{
int N,max,min,t;
double mid;
cin>>N;
if(N==0)
return 0;

cin>>t;
min=max=t;
data[1]=t;

if(N==1)
{
printf("%d %d %d", t, t, t);
return 0;
}

for(int i=2;i<=N;i++)
{
cin>>t;
max=t>max?t:max;
min=t<min?t:min;
data[i]=t;
}

//中位数为平均数
if(N%2==0)
{
int x1 = data[N/2], x2 = data[N/2+1];
if((x1 ^ x2) & 1) //如果参与计算的两个参数奇偶性互异,会出小数
{
mid = (x1 + x2) / 2.0;
//printf("%d %.1lf %d", max, mid, min); //C标准输入输出写法
cout<<max<<" "<<round(mid*10)/10.0<<" "<<min<<endl; //C++输出流写法
}
else //如果参与计算的两个参数奇偶性相同,整数
{
mid = (x1+x2)>>1;
//printf("%d %d %d", max, mid, min);
cout<<max<<" "<<(int)mid<<" "<<min<<endl; //这里不转int型,90分
}
}
//中位数不为平均数
else
{
mid = data[N/2+1];
printf("%d %d %d", max, data[N/2+1], min);
}

//cout<<max<<" "<<round(mid*10)/10<<" "<<min<<endl; //不能这样统一写,85分
return 0;
}

  • java

import java.util.*;

public class Main
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int data[] = new int[1000000];
int min,max;

int N = input.nextInt();

if(N==0)
return;

data[1]=min=max=input.nextInt();

if(N==1)
{
System.out.println(min+" "+min+" "+min);
return;
}
else
{
for(int i=2;i<=N;i++)
{
data[i] = input.nextInt();
max = data[i] > max ? data[i]:max;
min = data[i] < max ? data[i]:min;
}

if(N%2==0)
{
int x1 = data[N/2], x2 = data[N/2+1];

if((x1&1) != (x2&1))
System.out.printf("%d %.1f %d",max,(x1+x2)/2.0,min);
else
System.out.printf("%d %d %d",max,(x1+x2)/2,min);
}
else
System.out.printf("%d %d %d",max,data[N/2+1],min);
}
}
}


举报

相关推荐

CSP小中大201903-1

201903-1 小中大 (栈)

小中大---csp201903-1

CCF201903-1 小中大

csp201912-1 Java

CSP 202109-1数组推导

CSP202109-1 数组推导

python中大顶堆和小顶堆

0 条评论