zoukankan      html  css  js  c++  java
  • C++ STL 之 deque容器 打分案例(内含sort排序用法)

      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 }
  • 相关阅读:
    基于Lumisoft.NET组件开发碰到乱码等一些问题的解决
    Winform开发框架之混合型框架的剖析
    Winform开发框架之通用人员信息管理
    Database2Sharp之混合型Winform框架代码生成
    python3 小技巧(2)
    Python小技巧1
    详解Python模块导入方法
    常见HTTP状态(304,200等)
    python win32api 使用小技巧
    python3下的IE自动化模块PAMIE
  • 原文地址:https://www.cnblogs.com/duxie/p/10902458.html
Copyright © 2011-2022 走看看