题目:
十个评委给5个选手打分,去除每个选手的最高分和最低分,打印出每个选手的平均分。
分析:
- 5个选手的信息(class 【姓名,平均分】)存储在 vector 中,最后显示的时候遍历 vector 打印出信息;
- 需要删除最高分和最低分(极值),可先进行排序,然后删除。 → 分数存储在 deque 中,直接对排序后的首尾数据进行处理。
代码:
1 #include <iostream> 2 #include <string> 3 #include <vector> 4 #include <deque> 5 #include <ctime> 6 #include <algorithm> 7 #include <iomanip> 8 using namespace std; 9 10 //选手信息(姓名,平均分) 11 class Person 12 { 13 public: 14 string name; 15 float score; //平均分 16 17 Person(string n, float s) : name(n), score(s) {} 18 }; 19 20 21 //创建5名选手 22 void createPerson(vector<Person>& v) 23 { 24 string nameSeed = "ABCDE"; 25 for (int i = 0; i < 5; ++i) 26 { 27 string name = "选手"; 28 name += nameSeed[i]; 29 30 float score = 0.0; 31 Person p(name, score); 32 33 v.push_back(p); 34 } 35 } 36 37 38 //设置分数(随机数)并计算结果 39 void setScore(vector<Person>& v) 40 { 41 //5个人循环操作(存入数据,排序,删除首位,赋值成员变量) 42 for (vector<Person>::iterator it = v.begin(); it != v.end(); ++it) 43 { 44 //10个随机分数 45 deque<float> d; 46 for (int i = 0; i < 10; ++i) 47 { 48 float score = rand() % 11; //0 ~ 10 49 d.push_back(score); 50 } 51 52 ////测试打分是否正常 53 //for (deque<float>::iterator it = d.begin(); it != d.end(); ++it) 54 //{ 55 // cout << *it << ' '; 56 //} 57 //cout << endl; 58 59 //排序 60 sort(d.begin(), d.end()); //默认从小到大排序 61 62 //去除最高和最低分 63 d.pop_back(); //最高 64 d.pop_front(); 65 66 //计算总分和平均分 67 float sum = 0; 68 float average = 0.0; 69 for (auto i : d) 70 sum += i; 71 72 average = sum / d.size(); 73 74 //赋值给类成员变量 75 (*it).score = average; 76 } 77 } 78 79 80 //显示最终信息(姓名,平均分) 81 void show_w(vector<Person>& v) 82 { 83 for (auto i : v) 84 { 85 cout << "Name: " << i.name << setw(13); 86 cout << "Average: " << i.score << endl; 87 } 88 } 89 90 91 int main() 92 { 93 //设置随机数种子 94 srand((unsigned int)time(NULL)); 95 96 //vector 容器存放选手 97 vector<Person> v; 98 99 //创建选手 100 createPerson(v); 101 102 ////测试选手信息 103 //for (vector<Person>::iterator it = v.begin(); it != v.end(); ++it) 104 //{ 105 // cout << "Name: " << (*it).name << endl; 106 //} 107 108 //设置分数 109 setScore(v); 110 111 //打印结果 112 show_w(v); 113 }