ccf 201903-1

 

输入:第一行为要输入的整数个数,第二行为一组有序整数(可能含相同数)

输出:最大 中位数 最小 (其中中位数不为整数时保留一位小数)

分析:用sort将数组排序(也可以根据升降序分类讨论)

难点在于中位数


  1. 整数除法用 “/”的话得到的是一个整数(得到小数的话自动去掉小数位只保留整数位)
  2. 两个数转化为double类型,再进行“/”除法
  3. 规定输出保留多少位小数,则用cout<<setprecision(2)<<fixed<<……;其中2表示保留多少位小数

  4. 或者cout<<setiosflags(ios::fixed)<<setprecision(0)<<a[n-1] 


     错误原因:将所有中位数强制保留一位小数,忽略了小数部分为0的情况,在随机测试了几组数据之后发现了问题,最后分情况讨论:if((mid - (int)mid) != 0)判断需不需要保留一位小数

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    	int n;
       cin>>n;
       double a[n];
       for(int i=0;i<n;i++)
       {
       	cin>>a[i];
       }
       sort(a,a+n);
       float mid;
       
       cout<<setiosflags(ios::fixed)<<setprecision(0)<<a[n-1]<<' ';
       if(n%2==0) 
        {
       	  mid=(a[n/2]+a[n/2-1])/2;
          if((mid - (int)mid) != 0)cout<<setprecision(1)<<fixed<<mid; 
          else cout<<setiosflags(ios::fixed)<<setprecision(0)<<mid; 
    	}
       else{mid=a[n/2];cout<<setiosflags(ios::fixed)<<setprecision(0)<<mid;}
       cout<<setiosflags(ios::fixed)<<setprecision(0)<<' '<<a[0];
       return 0;
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值