题目要求:要求有五名学生,共计十个评委给每位学生打分,积分规则为,去除打分中的最高分和最低分,其余分数求平均,然后按分数高低排名。
#include<iostream>
#include<vector>
#include<string>
#include<deque>
#include<algorithm>
using namespace std;
//选手类
class Player
{
public:
Player(){}
Player(string name,int score):mName(name),mScore(score) {}
public:
string mName;
int mScore;
};
//创建选手
void Creat_Player(vector<Player>& v)
{
string nameSeed="ABCDE";
for(int i=0;i<5;i++)
{
Player p;
p.mName="选手";
p.mName+=nameSeed[i];
p.mScore=0;
v.push_back(p);
}
}
void printScore(int val)
{
cout<<val<<" ";
}
//选手打分
void Set_Score(vector<Player>& v)
{
for(vector<Player>::iterator it=v.begin();it!=v.end();it++)
{
deque<int>dScore;
for(int i=0;i<10;i++)
{
int score=rand()%41+60;//随机取[60,100]的值
dScore.push_back(score);//把分数添加在容器当中
}
sort(dScore.begin(),dScore.end());//从小到大排序
/*for_each(dScore.begin(),dScore.end(),printScore);
cout <<endl;*/
dScore.pop_back();//删除最高分
dScore.pop_front();//删除最低分
int total=0;
for(deque<int>::iterator dit=dScore.begin();dit!=dScore.end();dit++)
{
total+=(*dit);
}
int AveScore=total/dScore.size();
//平均分保存在学生信息当中
(*it).mScore=AveScore;
}
}
bool cmp(Player& p1,Player &p2)
{
return p1.mScore>p2.mScore;
}
//排名
void Print_Rank(vector<Player>& v)
{
sort(v.begin(),v.end(),cmp);//自定义排序(实现从大到小排序)
for(vector<Player>::iterator it=v.begin();it!=v.end();it++)
{
cout<<"姓名:"<<(*it).mName<<"平均分:"<<(*it).mScore<<endl;
}
}
int main()
{
vector<Player>vPlist;
Creat_Player(vPlist);
Set_Score(vPlist);
Print_Rank(vPlist);
return 0;
}