要求:
1、五位选手。
2、十位评委打分,去掉最高最低分,算出平均分。
3、将平均分(最终分)按照从高到低排列。
4、用到动态数组和排序。
#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
class player {
public:
//两个默认构造函数
player() {};
player(string name, int number) :player_name(name), player_number(number) {};
//公有成员,方便外部访问
public:
string player_name;
int player_number;
};
//创建所有选手
void creat_player(vector<player>& v) {
string nameseed[5] = { "kaka","Tom","Jane","Maic","KOL" };
player p;
for (int i = 0; i < 5; i++) {
p.player_name = "选手";
p.player_name += nameseed[i];
p.player_number = 0;
v.push_back(p);
}
}
//排序规则 从高到底
bool mycompare(player& p1, player& p2) {
return p1.player_number > p2.player_number;
};
//打分去掉一个最高分,和一个最低分,算出平均分
void set_number(vector<player>& v) {
deque<int>d_score;
for (vector<player>::iterator it = v.begin(); it != v.end(); it++) //容器遍历
{
for (int ji = 0; ji < 10; ji++) {
//用随机函数 rand()模拟评委打分
int number = rand() % 41 + 60;
d_score.push_back(number);
}
sort(d_score.begin(), d_score.end()); //对分数排序
//for_each(d_score.begin(), d_score.end(), printf_soft);//遍历
//用动态容器deque去除最高分和最低分
d_score.pop_front();
d_score.pop_back();
int men = 0;
for (int i = 0; i < 8; i++) {
men += d_score[i];
}
double average_score = men / d_score.size();
cout << average_score << endl;
//将平均分放入容器(覆盖之前0分)
it->player_number = average_score;
}
}
//输出分数
void parint_rank(vector<player>& v) {
sort(v.begin(), v.end(), mycompare); //按照mycompare设定排序
for (vector<player>::iterator it = v.begin(); it != v.end(); it++)
{
cout << it->player_name << "选手分数: " << it->player_number << endl;
}
}
int main(int argc, char *argv[])
{
//调用
vector<player>vplist;
creat_player(vplist);
set_number(vplist);
parint_rank(vplist);
}
运行结果: