1 #include <iostream>
2 #include <vector>
3 #include <time.h>
4 #include <deque>
5 #include <algorithm>
6 using namespace std;
7
8 // 评委打分案例(sort 算法排序)
9 // 创建 5 个选手(姓名,得分) , 10 个评委对 5 个选手进行打分
10 // 得分规则:去除最高分,去除最低分,取出平均分
11 // 按得分对 5 名选手进行排名
12
13 // 选手类
14 class Player
15 {
16 public:
17 Player(){}
18 Player(string name, int score) :mName(name), mScore(score){}
19 public:
20 string mName;
21 int mScore;
22 };
23
24 // 创建选手
25 void CreatePlayer(vector<Player>& v)
26 {
27 string nameSeed = "ABCDE";
28 for (int i = 0; i < 5; i++)
29 {
30 Player p;
31 p.mName = "选手";
32 p.mName += nameSeed.at(i);
33 p.mScore = 0;
34 v.push_back(p);
35 }
36 }
37
38 // 下面for_each函数的回调函数
39 void PrintScore(int val)
40 {
41 cout << val << " ";
42 }
43
44 // 打分
45 void SetScore(vector<Player>& p)
46 {
47 srand(time(NULL));
48 for (vector<Player>::iterator it = p.begin(); it != p.end(); it++)
49 {
50 // 给当前学生进行打分
51 deque<int> dScore;
52 for (int i = 0; i < 10; i++)
53 {
54 int score = rand() % 41 + 60;
55 cout << score << " ";
56 dScore.push_back(score);
57 }
58 cout << endl;
59
60 // 对分数进行排序 默认从小到大
61 sort(dScore.begin(), dScore.end());
62 // 打印排序后的分数
63 for_each(dScore.begin(), dScore.end(), PrintScore);
64 cout << endl;
65
66 // 去除最高分 去除最低分
67 dScore.pop_back();
68 dScore.pop_front();
69 // 求平均分
70 // 总分
71 int totalScore = 0;
72 for (deque<int>::iterator it = dScore.begin(); it != dScore.end(); it++)
73 {
74 totalScore += *(it);
75 }
76 // 平均分
77 int avgScore = totalScore / dScore.size();
78 // 保存分数
79 (*it).mScore = avgScore;
80 cout << "-------------------------" << endl;
81 }
82
83 }
84
85 // 排序规则(下面sort函数的回调函数)
86 bool myCompare(Player& p1, Player& p2)
87 {
88 return p1.mScore > p2.mScore;
89 }
90
91 // 根据选手分数排名 sort默认从小到大排序 希望是从大到小排序
92 void Print_Rank(vector<Player> v)
93 {
94 // 排序
95 sort(v.begin(), v.end(), myCompare);
96 // 打印
97 for (int i = 0; i < v.size(); i++)
98 {
99 cout << "姓名:" << v.at(i).mName.c_str() << " 得分:" << v.at(i).mScore << endl;
100 }
101 }
102
103 int main()
104 {
105 vector<Player> p;
106 CreatePlayer(p);
107 SetScore(p);
108 Print_Rank(p);
109 getchar();
110 return 0;
111 }