STL_打分案例

评委打分案例(sort 算法排序)

  • 创建 5 个选手(姓名,得分) , 10 个评委对 5 个选手进行打分
  • 得分规则:去除最高分,去除最低分,取出平均分
  • 按得分对 5 名选手进行排名
#define _CRT_SECURE_NO_WARNINGS
#define PLAYER_NUMBER 5
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<algorithm>
#include<stdlib.h>
#include<time.h>
using namespace std;

//选手类
class Player {
public:
	Player() {};
	Player(string name, int score){
		this->name = name;
		this->score = score;
	}
	string getName() {
		return this->name;
	}
	void setName(string name) {
		this->name = name;
	}
	int getScore() {
		return this->score;
	}
	void setScore(int score) {
		this->score = score;
	}
private:
	string name;
	int score;
};

void creat_player(vector<Player> &player_vector,int number) {
	string name_seed = "ABCDE";
	for (int i = 0; i < number; i++) {
		Player player;
		string tmp = name_seed.substr(i,1);
		player.setName("选手"+tmp);
		player.setScore(0);
		player_vector.push_back(player);
	}
}

void set_score(vector<Player>& player_vector) {
	
	srand(time(nullptr));

	for (vector<Player>::iterator it=player_vector.begin();it!=player_vector.end();it++) {
		
		deque<int> player_score_list;
		
		for (int i = 0;i<10;i++) {
			int score = rand() % 41 + 60;
			player_score_list.push_back(score);
		}
		
		sort(player_score_list.begin(),player_score_list.end());
		
		player_score_list.pop_back();
		player_score_list.pop_front();

		int total_score = 0;
		for (deque<int>::iterator dit = player_score_list.begin(); dit != player_score_list.end(); dit++) {
			total_score += (*dit);
		}
		int avg_score = total_score / player_score_list.size();

		(*it).setScore(avg_score);
	}
}

bool mycompare(Player& p1, Player& p2) {
	return p1.getScore() > p2.getScore();
}

void print_rank(vector<Player>& player_vector) {

	sort(player_vector.begin(),player_vector.end(),mycompare);

	for (vector<Player>::iterator it = player_vector.begin(); it != player_vector.end(); it++) {

		cout << "姓名:"<<(*it).getName()<<"  得分:"<<(*it).getScore()<<endl;
	}
}


int main()
{
	vector<Player> player_vector;
	creat_player(player_vector,PLAYER_NUMBER);
	set_score(player_vector);
	print_rank(player_vector);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值