#include <iostream>
#include <string>
#include <vector>
#include <ctime>
#include <algorithm>
#include <list>
#include <random>
#include <numeric>
using namespace std;
class Person
{
private:
/* data */
public:
Person(int id, int sorce):m_id(id), m_sorce(sorce){}
int m_id;
int m_sorce;
};
class printPerson
{
public:
void operator()(const Person p)
{
cout << "人员ID " << p.m_id << " 人员分数为 " << p.m_sorce << endl;
}
};
// 设置为降序
bool set_down(const Person p1,const Person p2)
{
return p1.m_sorce > p2.m_sorce;
}
void print_int(int sorce)
{
cout << sorce << " ";
}
void initPerson(vector<Person>& vec1, vector<Person>& vec2)
{
int arr[13] = {};
for(int i = 0; i < 12; i++)
{
int rand_num = rand() % (12 - i) + 1;
if(arr[12-i] == 0)arr[12-i] = 12-i;
if(arr[rand_num] == 0) arr[rand_num] = rand_num;
if(i < 6)
{
Person p(10000+arr[rand_num], 0);
vec1.push_back(p);
}else{
Person p(10000+arr[rand_num], 0);
vec2.push_back(p);
}
arr[rand_num] = arr[12-i];
}
}
void taoTaiSai(vector<Person>& vec)
{
for (vector<Person>::iterator it = vec.begin(); it != vec.end(); it++)
{
list<int> list_data;
for (size_t i = 0; i < 10; i++)
{
list_data.push_back(rand() % 40 + 61);
}
list_data.sort(greater<int>());
cout << it->m_id << " 的评委分别打分为 ";
for_each(list_data.begin(), list_data.end(), print_int);
list_data.pop_back();
list_data.pop_front();
for_each(list_data.begin(), list_data.end(), print_int);
it->m_sorce = accumulate(list_data.begin(), list_data.end(), 0) / 8;
cout << " 平均分为 " << it->m_sorce << endl;
}
sort(vec.begin(), vec.end(), set_down);
cout << "最终排名为 " << endl;
for_each(vec.begin(), vec.end(), printPerson());
cout << endl;
}
int main()
{
srand((unsigned int)time(NULL));
vector<Person> vec1;
vector<Person> vec2;
initPerson(vec1, vec2);
cout << "淘汰赛结果为 " << endl;
taoTaiSai(vec1);
taoTaiSai(vec2);
vector<Person>::iterator pos1 = vec1.begin();
vector<Person>::iterator pos2 = vec2.begin();
vector<Person> all_vec;
for (int i = 0; i < 3; i++)
{
all_vec.push_back(*pos1);
all_vec.push_back(*pos2);
pos1++;
pos2++;
}
cout << "---------------------------" << endl;
cout << "决赛结果为 " << endl;
taoTaiSai(all_vec);
system("pause");
return 0;
}
简单的使用vector去存储人员,在评委打分的时候使用list,没有什么核心,简单的使用一元谓语,重载,方便自己后续回来查看
// run
// g++ .\演讲比赛.cpp -o .\test; chcp 65001 ; .\test