有 5 名选手:选手 ABCDE,10 个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。
分析:
- 创建五名选手,放到 vector 中
- 遍历 vector 容器,取出来每一个选手,执行 for 循环,可以把 10 个评委打分存到 deque 容器中
- sort 算法对 deque 容器中分数排序,去除最高和最低分
- deque 容器遍历一遍,累加总分
- 获取平均分
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