一、案例描述
有n名选手,10个评委分别对每一名选手打分,去掉最高分和最低分,然后求平均分
二、实现步骤
具体流程:
-
先创建一个选手类
-
利用vector容器存储n个选手对象
-
(1)利用用随机数随机10个评委打分,并用deque保存打分 (2)对deque容器内分数排序,然后删除第一个和最后一个分数 (3)求deque中剩余分数的平均分并存储到vector容器中
-
打印输出vector容器中的每个选手对象
1.创建选手类
class Person
{
public:
string m_name;//选手姓名
float m_score;//选手平均分数
Person(string name, float score)
{
m_name = name;
m_score = score;
}
void showScore()//打印选手平均分
{
cout << m_name << "平均得分:" << m_score << endl;
}
};
2.存储选手对象
void creatPerson(vector<Person>& v,int n) //创建n个选手并初始化
{
for (int i = 0; i < n; ++i)
{
Person p("选手", 0);
p.m_name += ('A'+i);
v.push_back(p);
}
}
3.得到平均分
void getScore(vector<Person>& v ,int n)//打印选手得分情况并求其平均分
{
srand((unsigned)time(NULL));//需要包含头文件#include<ctime>
//deque<int> deq[10];
for (int i = 0; i < n; ++i)
{
deque<int> deq;
//评委打分,并打印
cout << v[i].m_name << "的得分为情况为:";
for (int j = 0; j < 10; ++j)
{
int score = rand() % 40+60;
deq.push_back(score);
cout << score << " ";
}
cout << endl;
//去掉最高分最低分
sort(deq.begin(), deq.end());//排序函数进行排序
deq.pop_back();
deq.pop_front();
//求平均分
int sum = 0;
for (int j = 0; j < deq.size(); ++j)
{
sum += deq[j];
}
v[i].m_score = 1.0* sum / deq.size();
}
}
4.打印平均分
void printAverageScore(vector<Person> &v)//打印选手平均分
{
for (int i = 0; i < v.size(); ++i)
{
v[i].showScore();
}
}
三、源码汇总
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<algorithm>
#include<ctime>
using namespace std;
class Person //创建选手类
{
public:
string m_name;//选手姓名
float m_score;//选手平均分数
Person(string name, float score)
{
m_name = name;
m_score = score;
}
void showScore()//打印选手平均分
{
cout << m_name << "平均得分:" << m_score << endl;
}
};
void creatPerson(vector<Person>& v,int n) //创建n个选手并初始化
{
for (int i = 0; i < n; ++i)
{
Person p("选手", 0);
p.m_name += ('A'+i);
v.push_back(p);
}
}
void getScore(vector<Person>& v ,int n)//打印选手得分情况并求其平均分
{
srand((unsigned)time(NULL));//需要包含头文件#include<ctime>
//deque<int> deq[10];
for (int i = 0; i < n; ++i)
{
deque<int> deq;
//评委打分,并打印
cout << v[i].m_name << "的得分为情况为:";
for (int j = 0; j < 10; ++j)
{
int score = rand() % 40+60;
deq.push_back(score);
cout << score << " ";
}
cout << endl;
//去掉最高分最低分
sort(deq.begin(), deq.end());//排序函数进行排序
deq.pop_back();
deq.pop_front();
//求平均分
int sum = 0;
for (int j = 0; j < deq.size(); ++j)
{
sum += deq[j];
}
v[i].m_score = 1.0* sum / deq.size();
}
}
void printAverageScore(vector<Person> &v)//打印选手平均分
{
for (int i = 0; i < v.size(); ++i)
{
v[i].showScore();
}
}
int main()
{
vector<Person> v;
creatPerson(v,5);
getScore(v, 5);
printAverageScore(v);
}