日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++中STL实现演讲比赛流程

發布時間:2023/11/30 c/c++ 81 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中STL实现演讲比赛流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

演講比賽流程

1)某市舉行一場演講比賽,共有 24 個人參加,按參加順序設置參賽號。比賽共三輪,前兩 輪為淘汰賽,第三輪為決賽。
2)比賽方式:分組比賽

  • 第一輪分為 4 個小組,根據參賽號順序依次劃分,比如 100-105 為一組,106-111 為第 二組,依次類推,每組 6 個人,每人分別按參賽號順序演講。當小組演講完后,淘汰組內排 名最后的三個選手,然后繼續下一個小組的比賽。
  • 第二輪分為 2 個小組,每組 6 人,每個人分別按參賽號順序演講。當小組完后,淘汰組 內排名最后的三個選手,然后繼續下一個小組的比賽。
  • 第三輪只剩下 6 個人,本輪為決賽,選出前三名。
  • 3). 選手每次要隨機分組,進行比賽。

    4)比賽評分:10 個評委打分,去除最低、最高分,求平均分 每個選手演講完由 10 個評委分別打分。該選手的最終得分是去掉一個最高分和一個最 低分,求得剩下的 8 個成績的平均分。選手的名次按得分降序排列,若得分一樣,按參賽號 升序排名。

    需解決問題

    1) 請打印出所有選手的名字與參賽號,并以參賽號的升序排列。
    2) 打印每一輪比賽前,分組情況
    3) 打印每一輪比賽后,小組晉級名單
    4) 打印決賽前三名,選手名稱、成績。

    #include<iostream> #include<vector> #include<map> using namespace std; #include<string> #include<algorithm> #include<deque> #include<numeric> #include<functional> class Speaker { public:string m_Name;//姓名int m_Score[3];//得分數組};//創建選手函數 void createSpeaker(vector<int>&v, map<int,Speaker>&m) {string nameSeed = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//創建選手for (int i = 0; i < 24; ++i){string name = "選手";name += nameSeed[i];Speaker sp;sp.m_Name = name;//得分初始化for (int j = 0; j < 3; j++){sp.m_Score[j] = 0;}//將選手放到容器中v.push_back(i + 100);//編號100~123m.insert(make_pair(i + 100, sp));}}//抽簽函數 void speechDraw(vector<int >v) {//洗牌random_shuffle(v.begin(), v.end()); }//比賽函數 // 1 第幾輪得分 2 v1比賽選手編號,3 m是選手編號和具體選手 4 v2晉級選手編號容器 void speechContest(int index,vector<int>&v1, map<int, Speaker>&m, vector<int>&v2) {//臨時容器multimap<int, int, greater<int>>groupMap;//分數 編號int num = 0;for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++){num++;deque<int>d;for (int i = 0; i < 10; i++){//分數隨機給int score = rand() % 41 + 60;//60~100d.push_back(score);}//排序sort(d.begin(), d.end());//去除最高最低分d.pop_back();d.pop_front();//累計分數int sum = accumulate(d.begin(),d.end(),0);int avg = sum / d.size();//將平均分 放入到m容器中//第幾輪的得分m[*it].m_Score[index - 1] = avg;//每6個人取前三名 晉級 進入v2容器//臨時容器保存6個人,晉級完后清空,再進入6個人//臨時容器,存入數據groupMap.insert(make_pair(avg, *it));if (num % 6 == 0) //夠6個人進入{/*cout << "小組比賽成績如下:" << endl;for (multimap<int, int, greater<int>>::iterator mit = groupMap.begin(); mit != groupMap.end(); mit++){cout << "編號:" << mit->second << "姓名:" << m[mit->second].m_Name << "得分:" << m[mit->second].m_Score[index - 1] << endl;} *///取前三名int count = 0;for (multimap<int, int, greater<int>>::iterator mit = groupMap.begin(); mit != groupMap.end(), count < 3; mit++, count++){//晉級容器 獲取數據v2.push_back(mit->second);}groupMap.clear();//清空容器}} }void showScore(int index, vector<int>&v, map<int, Speaker>&m) {cout << "第" << index << "輪,比賽成績如下:" << endl;for (map<int, Speaker>::iterator it = m.begin(); it != m.end(); it++){cout << "選手編號:" << it->first << "姓名:" << it->second.m_Name << "分數:" << it->second.m_Score[index - 1]<<endl;}cout << "晉級選手編號:" << endl;for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << endl;} }int main() {vector<int>v1;//放選手編號map<int, Speaker> m ;//存放選手編號,和隊醫你個的具體選手//創建選手createSpeaker(v1, m);//抽簽speechDraw(v1);//比賽vector<int>v2;//進入下一輪比賽的人員編號speechContest(1,v1, m, v2);//顯示比賽結果showScore(1,v2,m);//輪數,晉級編號,具體的人員信息//第二輪比賽speechDraw(v2);vector<int>v3;//第三輪的容器speechContest(2, v2, m, v3);showScore(2, v3, m);//第三輪比賽speechDraw(v3);vector<int>v4;//第四輪的容器,也就是最后的容器speechContest(3, v3, m, v4);showScore(2, v4, m);/*for (map<int,Speaker>::iterator it = m.begin(); it != m.end(); it++){cout << "編號:" << it->first << "姓名:" << it->second.m_Name << endl;}*/system("pause");return 0; }



    總結

    以上是生活随笔為你收集整理的c++中STL实现演讲比赛流程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。