Problem B: 评委打分

Problem B: 评委打分

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 171  Solved: 27
[Submit][Status][Web Board]

Description

 一个歌唱比赛,比赛每次会从观众中随即抽取几名观众给分(观众至少有5个,分数为0~10分),由于观众感情色彩较重,不能像评委那般全部作数,所以赛方想出去掉2个最高分与2个最低分,剩下的取平均值作为一名选手的分数(分数取整,四舍五入),赛方无暇来做这个程序,于是来找你帮忙。

Input

刚开始,输入T,表示有T名选手参赛,跟着一个数n,为抽取的n名评委,接下来n个数为各评委的评分。

Output

输出第几名选手的平均分,每两名选手间有空行间隔(最后一名后没有)。

Sample Input

2

5 0 10 5 4 4

7 5 4 6 2 3 0 3

Sample Output

Num 1:4

 

Num 2:3

解题思路:

1)数据采用结构体,用qsort函数进行从小到大排序,去掉前两个和后两个。

2)四舍五入:采用 int(num + 0.5)解决。

代码:

#include <iostream>
#include <cmath>
#include <stdlib.h>
 
using namespace std;
 
struct score
{
    int s;
} SCORE[100];
 
int compare(const void *a, const void *b)
{
    struct score *c = (score *)a;
    struct score *d = (score *)b;
 
    if (c->s > d->s)
        return -1;
    else
        return 1;
}
 
int main()
{
    int T;
    int n;
    int sum;
    int flag = 0;
 
    cin >> T;
    int i;
    for (i = 1; i <= T; ++i)
    {
        cin >> n;
        sum = 0;
        ++flag;//选手
 
        if (n >= 5)
        {
            int j;
            for (j = 0; j < n; ++j)
            {
                cin >> SCORE[j].s;
            }
 
            qsort(SCORE, n, sizeof(SCORE[0]), compare);//stdlib.h 从大到小排序
        //  for (j = 0; j < n; ++j)
        //  {
        //      cout << SCORE[j].s << endl;
        //  }
            for (j = 2; j < n-2; ++j)
            {
                sum += SCORE[j].s;
            }
             
            cout << "Num " << flag << ":" << int(sum / (1.0*(n-4)) + 0.5) << endl;
            if (i != T)
                cout << endl;
        }
     
    }
 
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值