首页 > 其他 > 详细

P5738 【深基7.例4】歌唱比赛

时间:2021-05-25 23:46:36      阅读:53      评论:0      收藏:0      [点我收藏+]

题目描述

n(n\le 100)n(n100) 名同学参加歌唱比赛,并接受 m(m\le 20)m(m20) 名评委的评分,评分范围是 0 到 10 分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下 m-2m?2 个评分的平均数。请问得分最高的同学分数是多少?评分保留 2 位小数。

输入输出样例

输入 #1
7 6
4 7 2 6 10 7
0 5 0 10 3 10
2 6 8 4 3 6
6 3 6 7 5 8
5 9 3 3 8 1
5 9 9 3 2 0
5 8 0 4 1 10
输出 #1
6.00

题目分析

1.首先输入学生和评委数量,用for实现。

2.输入每个评委的打分,数组形式存储。

3.用sort 排序 找出最高和最低分 去掉

程序代码:(每行代码加注释是个好习惯,坚持)

#include<bits/stdc++.h>//头文件
using namespace std;
int main()
{
    int n,m;//定义
    double MAX=INT_MIN;//注意首先把最大值设为INT_MIN,注意(在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。
    cin>>n>>m;//输入学生数量和评委数量
    for(int i=1;i<=n;i++)//循环输入学生for循环
    {
        double s[1000],sum=0;//临时数组记录本组内容
        for(int j=1;j<=m;j++)//循环输入评委的for循环
        {
            cin>>s[j];    //输入每个成绩
            sum+=s[j];//每次把成绩累计求和
        }
        sort(s+1,s+m+1);//调用sort进行排序
        sum=sum-s[1]-s[m];//找到最大最小值,减去最大值和最小值
        sum/=(m-2);//注意算平均分的时候要减去最大、最小值所以数量是m-2
        if(sum>MAX) MAX=sum;//这里比较大小,sum大把sum赋给MAX
    }    
    cout<<fixed<<setprecision(2)<<MAX;//保留两位小数,输出结果
    return 0;    //结束
}

运行结果


技术分享图片

题目总结:

1.注意sort()的用法,Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c++以来使用的冒泡排序和选择排序所带来的执行效率不高的问题!

Sort函数有三个参数:

(1)第一个是要排序的数组的起始地址。

(2)第二个是结束的地址(最后一位要排序的地址)

(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

2.注意INT_MIN在标准头文件limits.h中定义。

#include<limits.h>
C/C++中常量INT_MAX和INT_MIN分别表示最大、最小整数,头文件是limits.h。

INT_MAX = 2^31-1=2147483647;

INT_MIN= -2^31=-2147483648;
在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限。
3.保留小数点的写法归纳了三种:

//第一种写法
cout<<setiosflags(ios::fixed)<<setprecision(2);
//第二种写法
cout.setf(ios::fixed);
cout<<setprecision(2);
//第三种写法
cout<<fixed<<setprecision(2);
好好学习,天天向上。

贵在坚持,加油!

 

 

P5738 【深基7.例4】歌唱比赛

原文:https://www.cnblogs.com/limingze/p/14810552.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!