天梯赛团队总分

该篇文章介绍了如何使用C++编程实现一个团队竞赛成绩管理系统,包括输入队员分数、按题型分类、计算个人及团队总分,并对成绩进行排序。
摘要由CSDN通过智能技术生成

#include<iostream>
#include<vector>
#include<numeric>
#include<string>
#include<cmath>
#include<algorithm>
class gra
{
public:
    int x;//序号
    int y;//分数
     gra() : x(0), y(0) {} // 默认构造函数
    gra(int x,int y)
    {
        this->x=x;
        this->y=y;
    }

};
//自定义比较函数
bool compareByX(const gra &a, const gra &b) {
    return a.y > b.y;
}
using namespace std;
int main()
{
    int n;
    cin>>n;
    vector<vector<int>> s1(6,vector<int>(9,0));//基础8题
    vector<vector<int>> s2(6,vector<int>(5,0));//进阶4题
    vector<vector<int>> s3(6,vector<int>(4,0));//登顶3题
    vector<int> grade(6,0); //个人所得有效分
    int sum1=0,sum2=0,sum3=0;
    int sum=0;//团队总分
    for(int i=1;i<=n;i++)
    {
        int num;    //队员编号
        string s;   //题目号
        int score;  //分数
        cin>>num>>s>>score;
        int tihao=s[3]-'0';     //题号
        if(s[1]=='1')           //s[1]表示题目类型,(基础题,进阶题,登顶题)
        {
            if(score>s1[num][tihao])
            {
            s1[num][tihao]=score;   //取最高分
            }
        }
        else if(s[1]=='2')
        {
            if(score>s2[num][tihao])
            {
            s2[num][tihao]=score;   //取最高分
            }
        }
        else if(s[1]=='3')
        {
            if(score>s3[num][tihao])
            {
            s3[num][tihao]=score;   //取最高分
            }
        }
    }

    vector<gra> grad;  //每位队员的编号和总分
    for(int j=1;j<=5;j++)
    {
        
        vector<int> a(3,0);
        a[0]=accumulate(s1[j].begin(),s1[j].end(),0);//基础题分数
        sum1+=a[0];     //计入总分
        a[1]=accumulate(s2[j].begin(),s2[j].end(),0);//进阶分数
        sum2+=a[1];     //计入总分
        a[2]=accumulate(s3[j].begin(),s3[j].end(),0);//登顶分数
        sum3+=a[2];     //计入总分
        grade[j]=a[0];  
        if(a[0]>60)
        {
            grade[j]+=a[1];
            if(a[1]>25)
            {
                grade[j]+=a[2];
            }
        }
        gra cla(j,grade[j]);
        grad.push_back(cla);
    }
    sort(grad.begin(),grad.end(),compareByX);
    sum=sum1;
    //输出团队总分
    if(sum1>300)
    {
        sum+=sum2;
        if(sum2>125)
        {
            sum+=sum3;
        }
    }
  
    cout<<sum<<endl;
    //输出排序后的分数
    for(gra m:grad)
    {
        cout<<m.x<<" "<<m.y<<endl;
    }
    system("pause");
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值