1790 合唱比赛开始了!

本文介绍了一个针对计算机科技文化节中合唱比赛的评分系统设计。系统包括输入各队信息、计算最终得分、显示信息及排序功能。评分流程涉及多个评委对各队进行评分,计算平均分并去除最高最低分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

为迎接计算机科技文化节的到来,我院面向一年级学生举办了一场合唱比赛。邀请了若干位专家担任评委,并为每个参赛队评分。现在,请设计一个程序来展示这个比赛过程。

其中,类 Team描述了参赛队的信息,包括:专业名称、每个专家给该参赛队的评分以及最终得分等。类Contest描述了竞赛的信息,包括各个参赛队的列表,并提供

1. void Input()方法:用于输入所有参赛队的信息;

2. void Compute()方法:计算每个代表带队的最终得分。

3. void Show()方法:显示所有代表队的信息。

4. void Sort()方法:根据代表队的最终得分进行排序。

要求:

1. 假设有M个代表队参加比赛,有N个评委进行评分,且评分标准包括P项。

2. 每个评委将为每个代表队打出P个分项分,每项得分都在0~100之间,一个评委为一个代表队评出的最终分数是所给出的所有分项分的平均分。如:P=3,评委1给代表队x打的3个分数为100,90,80,则x代表队得到的来自于评委1的分数为(100+90+80)/3=90。

3. 每个代表队得到的最终分数是N个评委的给出的N个分数值,去掉1个最高分,1个最低分,剩余分数的平均值。如:经过上一步的计算,x代表队得到的来自N=4个评委的得分分别是100,90,80,70,则x代表队的最终得分是(90+80)/2=85。

 

Input

 输入有多行。第一行分别输入M>1,N>3,P>0表示代表队数量、评委人数以及评分标准数。

之后分别输入M个代表的信息。每个代表队信息的第一行是队伍的专业名(10个字母以内),之后的N行是N个评委为该代表队打的分数,其每行有P个数,分别是该评委为该代表队打出的各个分项分。

Output

 输出有M行,根据每个代表队的得分,按照从大到小的顺序输出。其中专业名称靠左输出,占11个字符,之后输出成绩。成绩输出2位小数。假定所有队伍的得分都不相同。

Sample Input

3 4 5

MajorA

90 90 90 90 90

82 83 81 82 86

70 70 70 70 70

90 90 90 90 90

MajorAA

85 79 90 78 80

80 80 80 80 80

81 81 83 82 81

80 80 80 80 80

MajorAaa

70 70 70 70 70

70 70 70 70 70

70 70 70 70 70

70 70 70 70 70

Sample Output

MajorA 86.40

MajorAA 80.80

MajorAaa 70.00

 

HINT

 

 用left来让输出左对齐。

 

 

 

Append Code

append.cc,

#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
#include <algorithm>
using namespace std;
class Team
{
    friend class Contest;
private:
    vector<int> a;//用于记录评委打分
    int n,p;//n个评委,p个标准
    double sc;//平均分
    string zhu;//专业名
public:
    Team(){}
    Team(int nn,int pp):n(nn),p(pp){}
    friend istream &operator>>(istream &is,Team &q)//输入专业名,分数
    {
        is>>q.zhu;
        for(int i=0;i<q.n*q.p;i++)
        {
            int t;
            cin>>t;
            q.a.push_back(t);
        }
        return is;
    }
    double getsc()//计算平均得分并返回
    {
        double sum=0;
        vector<double> eve;
        for(int i=0;i<n*p;i++)
        {
            eve.push_back(0);
        }
        for(int i=0,f=0;i<n&&f<n*p;i++)
        {
 
            for(int j=0;j<p&&f<n*p;j++,f++)
            {
                eve[i]+=a[f];
            }
            eve[i]=eve[i]/p;
            sum+=eve[i];
        }
        double ma=eve[0];
        double mi=eve[0];
        for(int i=0;i<n;i++)
        {
            if(eve[i]>ma)
                ma=eve[i];
            if(mi>eve[i])
                mi=eve[i];
        }
        sc=(sum-ma-mi)/(n-2);
        return sc;
    }
    ~Team(){}
};
class Contest
{
    int M,N,P;
    vector<Team> a;
public:
    inline void Input();//用于输入所有参赛队的信息
    inline void Compute();//计算每个代表带队的最终得分
    inline void Show();//显示所有代表队的信息。
    inline void Sort();//根据代表队的最终得分进行排序
};
void Contest::Input()
{
    cin>>M>>N>>P;
    int i,j,k;
    for(i=0;i<M;i++)
    {
        Team tt(N,P);
        cin>>tt;
        a.push_back(tt);
    }
}
void Contest::Compute()
{
    for(int i=0;i<M;i++)
    {
        a[i].getsc();
    }
}
void Contest::Show()
{
    for(int i=0;i<M;i++)
    {
        cout<<setiosflags(ios::left)<<setw(11)<<a[i].zhu<<fixed<<setprecision(2)<<a[i].getsc()<<endl;
    }
}
void Contest::Sort()
{
    for(int i=0;i<M;i++)
    {
        for(int j=i;j<M;j++)
        {
            if(a[i].sc<a[j].sc)
            {
                Team cc;
                cc=a[i];
                a[i]=a[j];
                a[j]=cc;
            }
        }
    }
}
int main()
{
    Contest contest;
    contest.Input();
    contest.Compute();
    contest.Sort();
    contest.Show();
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值