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

分析:

  1. 创建五名选手,放到 vector
  2. 遍历 vector 容器,取出来每一个选手,执行 for 循环,可以把 10 个评委打分存到 deque 容器中
  3. sort 算法对 deque 容器中分数排序,去除最高和最低分
  4. deque 容器遍历一遍,累加总分
  5. 获取平均分
class Player{
public:
    Player(string name){
        m_name = name;
        m_avgScore = 0;
    }
    void setAvgScore(int v){
        m_avgScore = v;
    }
    void printInfo()const{
        cout << m_name << "的平均分为:" << m_avgScore << endl;
    }
private:
    string m_name;
    int m_avgScore;
};
void createPlayers(vector<Player> &v){
    string nameSeed = "ABCDE";
    for(int i = 0; i < nameSeed.length(); ++i){
        string name = "选手";
        name += nameSeed[i];
        v.push_back(Player(name));
    }
}
void scorePlayers(vector<Player> &v){
    for(auto &p : v){
        // 把 10 个评委打分存到 deque 容器中
        deque<int> scores;
        for(int i = 0; i < 10; ++i){
            scores.push_back(rand() % 41 + 60);
        }
        // sort 算法对 deque 容器中分数排序,去除最高和最低分
        sort(scores.begin(), scores.end());

#if 0
        // 测试打印分数
        p.printInfo();
        cout << "------------------" << endl;
        for(const auto &s : scores){
            cout << s << " ";
        }
        cout << endl;
#endif    

        scores.pop_back();
        scores.pop_front();
        // deque 容器遍历一遍,累加总分并计算平均分
        int num = 0;
        for(const auto &s : scores){
            num += s;
        }
        p.setAvgScore(num / scores.size());
    }
}
void printScore(const vector<Player> &v){
    for(const auto &p : v){
        p.printInfo();
    }
}
int main()
{
    srand((unsigned int)time(NULL));
    // 创建五名选手
    vector<Player> v;
    createPlayers(v);
    // 10 个评委打分
    scorePlayers(v);
    // 打印平均分
    printScore(v);
    return 0;
}

输出:

选手A的平均分为:81
选手B的平均分为:84
选手C的平均分为:82
选手D的平均分为:83
选手E的平均分为:68