案例描述 有5名选手:选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。
实现步骤
- 创建五名选手,放到vector中
- 遍历vector容器,取出来每一个选手,执行for循环,可以把10个评分打分存到deque容器中
- sort算法对deque容器中分数排序,去除最高和最低分
- deque容器遍历一遍,累加总分
- 获取平均分
case_01.h
#pragma once
#include<iostream>
#include<string>
#include<vector>
#include<ctime> // 用于设置随机因子
#include<deque>
#include<algorithm> // 用于算法
using namespace std;
void case_01();
case_01.cpp?
#include"case_01.h"
class PersonB
{
public:
PersonB(string name,int score) {
this->name = name;
this->score = score;
}
string name;
int score;
};
void createPerson(vector<PersonB>& player_arr)
{
string nameSeed = "ABCDE";
for (int i = 0; i < 5; i++)
{
string name ="选手";
PersonB p(name, 0);
player_arr.push_back(p);
}
}
// 打分
void set_score(vector<PersonB>& player_arr)
{
for (vector<PersonB>::iterator i = player_arr.begin(); i != player_arr.end(); i++)
{
// 将评委的分数放入deque容器中
deque<int> score_arr;// 创建双端数组
// 把随机的10个数值放入数组中
for (int n = 0; n < 10; n++)
{
int score = rand() % 41 + 60;// 60-100;
score_arr.push_back(score);// 把10个随机分数放入deque容器中
}
// 排序
sort(score_arr.begin(), score_arr.end());
// 去掉最高和最低分
score_arr.pop_front();// 删除首位数值
score_arr.pop_back();// 删除末位数值
// 求平均分
int sum_score = 0;
int count = score_arr.size();
for (int i = 0; i < count; i++)
{
sum_score += score_arr[i];
}
int avg = sum_score / count;
// 把平均分放到每个选手属性上
i->score = avg;
}
}
// 打印分数
void show_score(vector<PersonB>& player_arr)
{
for (vector<PersonB>::iterator i = player_arr.begin(); i != player_arr.end(); i++)
{
cout << "姓名:" << i->name << " 分数:" << i->score << endl;
}
}
void case_01()
{
// 设置随机因子
srand((unsigned int)time(NULL));
// 创建选手数组
vector<PersonB> player_arr;
// C创建5名选手
createPerson(player_arr);
// 2.给5名选手打分
set_score(player_arr);
// 3.显示每位选手最后平均分
show_score(player_arr);
}
?
|