案例 评委打分 C++ 容器vector deque

案例:评委打分

有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分

步骤:

  1. 创建五名选手,放到vector中

  2. 遍历vector容器,取出来每一个选手,执行for循环,可以把10个评分打分存到deque容器中

  3. sort算法对deque容器中分数排序,去除最高和最低分

  4. deque容器遍历一遍,累加总分

  5. 获取平均分

    #include<iostream>
    using namespace std;
    #include<vector>
    #include<deque>
    #include<algorithm>
    #include <string>
    
    class Person{
        public:
        string m_Name;//姓名
        int m_Score;//平均分
        Person(string name,int score){
    
              this->m_Name=name;
              this->m_Score=score;
        }
    };
    
    void  creatPerson(vector<Person>&v){
        string nameSeed="ABCDE";
        for(int i=0;i<5;i++){
            string name="选手";
            name+=nameSeed[i];
            int score=0;
            Person p(name,score);
            //将创建的person对象 放入到容器中
            v.push_back(p);
        }
    }
    
    //打分
    void setScore(vector<Person>& v){
            for(vector<Person>::iterator it=v.begin();it!=v.end();it++){
                   //将评委的分数 放入到deque容器中
                   deque<int>d;
                   for(int i=0;i<10;i++){
                    int score=rand()%41+60;//60-100
                    d.push_back(score);
                   }         
                //    cout<<"选手:"<<it->m_Name<<"打分:"<<endl;
                //        for(deque<int>::iterator dit=d.begin();dit!=d.end();dit++){
                //       cout<<*dit<<"  ";
                //    }
                //    cout<<endl;
                   //排序
                   sort(d.begin(),d.end());
                   //去除最高分和最低分
                   d.pop_back();
                   d.pop_front();
    
                   int sum=0;
    
                   //取平均分
                   for(deque<int>::iterator dit=d.begin();dit!=d.end();dit++){
                          sum+=*dit;//累加每位评委的分数
                   }
                   int avg=sum/d.size();
                   //将平均分 赋值给选手身上
                   it->m_Score=avg;
        }
    }
    
    void showScore(vector<Person>&v){
        for(vector<Person>::iterator it=v.begin();it!=v.end();it++){
            cout<<"姓名:"<<(*it).m_Name<<"分数:"<<(*it).m_Score<<endl;
        }
    }
    int main (){
        //随机数种子
        srand((unsigned int)time(NULL));
        //1.创建5名选手
        vector<Person>v;
        creatPerson(v);
        setScore(v);
        showScore(v);
    
        // //测试
        // for(vector<Person>::iterator it=v.begin();it!=v.end();it++){
        //     cout<<"姓名:"<<(*it).m_Name<<"分数:"<<(*it).m_Score<<endl;;
        // }
    
        //2.给5名选手打分
        //3.显示最后得分
    
        return 0;
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值