• STL


      1 //案例:学校演讲比赛
      2 //1)某市举行一场演讲比赛,共有24个人参加,按参加顺序设置参赛号。比赛共三轮,前两轮为淘汰赛,第三轮为决赛。
      3 //2)比赛方式:分组比赛
      4 //   第一轮分为4个小组,根据参赛号顺序依次划分,比如100 - 105为一组,106 - 111为第二组,依次类推,每组6个人,每人分别按参赛号顺序演讲。当小组演讲完后,淘汰组内排名最后的三个选手,然后继续下一个小组的比赛。
      5 //   第二轮分为2个小组,每组6人,每个人分别按参赛号顺序演讲。当小组完后,淘汰组内排名最后的三个选手,然后继续下一个小组的比赛。
      6 //   第三轮只剩下6个人,本轮为决赛,选出前三名。
      7 //   选手每次要随机分组,进行比赛。
      8 //4)比赛评分:10个评委打分,去除最低、最高分,求平均分
      9 //   每个选手演讲完由10个评委分别打分。该选手的最终得分是去掉一个最高分和一个最低分,求得剩下的8个成绩的平均分。选手的名次按得分降序排列,若得分一样,按参赛号升序排名。
     10 //
     11 //用STL编程,求解一下问题
     12 //1) 请打印出所有选手的名字与参赛号,并以参赛号的升序排列。
     13 //2) 打印每一轮比赛前,分组情况
     14 //3) 打印每一轮比赛后,小组晋级名单
     15 //4) 打印决赛前三名,选手名称、成绩。
    // 【起始在这里你也可以用map/multimap来做】
    16 #include<iostream> 17 #include<vector> 18 #include<deque> 19 #include<algorithm> 20 using namespace std; 21 22 class Player 23 { 24 public: 25 Player() {}; 26 Player(int num) :num_(num){}; 27 ~Player() {}; 28 void getFinalScores(); 29 30 int num_; 31 deque<int> scores_;// 10个分数 32 int finalscores_; // 最终得分 33 private: 34 35 }; 36 37 bool scoresRank(int& a, int& b) 38 { 39 return a > b; 40 } 41 42 void Player::getFinalScores() 43 { 44 sort(scores_.begin(), scores_.end(), scoresRank); 45 scores_.pop_back();//去掉最低分 46 scores_.pop_front();//去掉最高分 47 int totalscores = 0; 48 for (deque<int>::iterator itr = scores_.begin(); itr != scores_.end(); itr ++) 49 { 50 totalscores += (*itr); 51 } 52 finalscores_ = totalscores / 8; //求平均分 53 } 54 55 void showScores(vector<Player>& allplayers) 56 { 57 for (auto& player:allplayers) 58 { 59 cout << "player :" << player.num_ << " scores : " << player.finalscores_ << endl; 60 } 61 } 62 63 bool groupRank(Player& p1, Player& p2) 64 { 65 return p1.finalscores_ > p2.finalscores_; 66 } 67 68 void firstGame(vector<Player>& allplayers) 69 { 70 // 打分并得到24名选手最终得分 71 for (size_t i = 0; i < allplayers.size(); i++) // 24 players 72 { 73 allplayers[i].num_ = 100 + i; 74 for (size_t j = 0; j < 10; j++) // 10个评委 给每一个选手打分 75 { 76 int randscore = rand() % 41 + 60; 77 allplayers[i].scores_.push_back(randscore); 78 } 79 allplayers[i].getFinalScores(); 80 } 81 cout << "第一轮24个人的分数 :" << endl; 82 showScores(allplayers); 83 //分4组并淘汰每组垫底3名 84 for (size_t i = 0; i < 4; i++) 85 { 86 sort(allplayers.begin() + i*6, allplayers.begin() + (i+1)*6, groupRank); 87 } 88 cout << "小组内部排序[6人一组,从最高分 -> 最低分]" << endl; 89 showScores(allplayers); 90 vector<Player> allplayers_; 91 // 取出每组前3名 92 for (size_t i = 0; i < 4; i++) 93 { 94 //allplayers.erase(allplayers.begin() + i * 6 + 2, allplayers.begin() + (i + 1) * 6); 95 allplayers_.push_back(allplayers[0 + 6*i]); 96 allplayers_.push_back(allplayers[1 + 6*i]); 97 allplayers_.push_back(allplayers[2 + 6*i]); 98 } 99 cout << "小组内部淘汰3人" << endl; 100 showScores(allplayers_); 101 allplayers.clear(); 102 allplayers = allplayers_; 103 } 104 105 void secondGame(vector<Player>& allplayers) 106 { 107 // 打分并得到24名选手最终得分 108 for (size_t i = 0; i < allplayers.size(); i++) // 24 players 109 { 110 //allplayers[i].num_ = 100 + i; 111 allplayers[i].scores_.clear();//清除第一轮得分 112 for (size_t j = 0; j < 10; j++) // 10个评委 给每一个选手打分 113 { 114 int randscore = rand() % 41 + 60; 115 allplayers[i].scores_.push_back(randscore); 116 } 117 allplayers[i].getFinalScores(); 118 } 119 cout << "第二轮12个人的分数 :" << endl; 120 showScores(allplayers); 121 122 //分2组并淘汰每组垫底3名 123 for (size_t i = 0; i < 2; i++) 124 { 125 sort(allplayers.begin() + i * 6, allplayers.begin() + (i + 1) * 6, groupRank); 126 } 127 cout << "小组内部排序[6人一组,从最高分 -> 最低分]" << endl; 128 showScores(allplayers); 129 vector<Player> allplayers_; 130 // 取出每组前3名 131 for (size_t i = 0; i < 2; i++) 132 { 133 //allplayers.erase(allplayers.begin() + i * 6 + 2, allplayers.begin() + (i + 1) * 6); 134 allplayers_.push_back(allplayers[0 + 6 * i]); 135 allplayers_.push_back(allplayers[1 + 6 * i]); 136 allplayers_.push_back(allplayers[2 + 6 * i]); 137 } 138 cout << "小组内部淘汰3人" << endl; 139 showScores(allplayers_); 140 allplayers.clear(); 141 allplayers = allplayers_; 142 } 143 144 void thirdGame(vector<Player>& allplayers) 145 { 146 sort(allplayers.begin(), allplayers.end(), groupRank); 147 cout << "第三轮6个人的分数 :" << endl; 148 showScores(allplayers); 149 150 //去掉后三名 151 allplayers.pop_back(); 152 allplayers.pop_back(); 153 allplayers.pop_back(); 154 } 155 156 int main() 157 { 158 vector<Player> allplayers; 159 allplayers.resize(24); 160 firstGame(allplayers); 161 secondGame(allplayers); 162 thirdGame(allplayers); 163 cout << "第三轮最终获奖的3个人的分数 :" << endl; 164 showScores(allplayers); 165 return 1; 166 }
  • 相关阅读:
    oracle中删除某个用户下的所有表
    oracle中关于clob类型字段的查询效率问题
    nvl(sum(字段),0) 的时候,能展示数据0,但是group by 下某个伪列的时候,查不到数据(转载)
    IDEA内存设置
    idea启动报Plugin Error错误的解决办法(亲测有效)
    有关大数据(如有侵权请联系博主删除)
    Spring AOP增强(Advice)
    带事务管理的spring数据库动态切换
    Spring配置多个数据源,并实现数据源的动态切换转载)
    洛谷 p1803 凌乱的yyy
  • 原文地址:https://www.cnblogs.com/winslam/p/9419297.html
Copyright © 2020-2023  润新知