Fork me on GitHub

评委打分(C++ 容器综合练习)

题目:

  十个评委给5个选手打分,去除每个选手的最高分和最低分,打印出每个选手的平均分。

分析:

  1. 5个选手的信息(class 【姓名,平均分】)存储在 vector 中,最后显示的时候遍历 vector 打印出信息;
  2. 需要删除最高分和最低分(极值),可先进行排序,然后删除。 → 分数存储在 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 }

 

posted @ 2020-03-19 13:11  墨小语  阅读(497)  评论(0编辑  收藏  举报