#pragma once
#pragma warning(disable : 4996)
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
/*1)某市舉行一場演講比賽,共有 24 個人參加,按參加順序設定參賽號。比賽共三輪,前兩 輪為淘汰賽,第三輪為決賽。
2)比賽方式:分組比賽
第一輪分為 4 個小組,根據參賽號順序依次劃分,比如 100 - 105 為一組,106 - 111 為第 二組,依次類推,每組 6 個人,每人分別按參賽號順序演講。當小組演講完後,淘汰組內排 名最後的三個選手,然後繼續下乙個小組的比賽。
根據需求所需
(一)開闢選手類 其中包括 姓名、得分 class _speaker
(二)建立vector容器單獨存放選手編號 vector _number
(三)建立map容器存放選手編號和選手 map_rank
(四)抽籤 random_shuffle演算法
(五)比賽
第二輪分為 2 個小組,每組 6 人,每個人分別按參賽號順序演講。當小組完後,淘汰組 內排名最後的三個選手,然後繼續下乙個小組的比賽。
第三輪只剩下 6 個人,本輪為決賽,選出前三名。
3).選手每次要隨機分組,進行比賽。
4)比賽評分:10 個評委打分,去除最低、最高分,求平均分 每個選手演講完由 10 個評委分別打分。該選手的最終得分是去掉乙個最高分和乙個最 低分,求得剩下的 8 個成績的平均分。選手的名次按得分降序排列,若得分一樣,按參賽號 公升序排名。
*///選手類
class _speaker
_number.push_back(i + 100); //為vector容器中分配編號
_rank.insert(make_pair(i + 100, _assignment));
//抽籤
void speechdraw(vector &_number)
//比賽 index 代表第幾輪
void speechcontest(int index,vector&_number, map& _rank, vector& _2_number)
//排序
sort(d.begin(), d.end());
//去除最低分最高分
d.pop_back();
d.pop_front();
//求總分
int sum = accumulate(d.begin(),d.end(),0);
//分數放入容器中
_rank[*it]._speaker_score[index - 1] = sum;
//每六個人乙個組 取前三名
//建立臨時容器 儲存六人
//臨時容器 存入資料
groupmap.insert(make_pair(sum, *it));
if(number%6==0)
groupmap.clear();}}
}void showscore(int index, vector&_2_number, map&_rank)
for (multimap>::iterator mit = groupmap.begin(); mit != groupmap.end(); ++mit)
}int main()
C 實現演講比賽小專案
對於這個小專案,有兩個只是盲區 1 定義了乙個自定義資料型別的類之後,在後面建立的時候,自定義資料型別必須要有預設建構函式,如果在自定義的類裡面定義了有參構造,就要自己定義乙個預設建構函式。2 自定義map容器等容器的排序的時候,傳進來的引數被系統預設以const型別的形式傳進來的,所以在過載ope...
C 之STL中sort函式的內部實現(一)
stl中提供了乙個sort 函式,用於排序。它的實現雖然是基於我們熟悉的quick sort,insertion sort,heap sort,但是內部卻龐大複雜。sort 函式只能接受randomaccessiterators,list slist都不能使用。stl中的sort 函式在資料量大的時...
C 之STL中sort函式的內部實現(二)
另外乙個版本 先進行introsort,基本有序後再使用insertion sort。introsort是改進的quick sort,為了防止最壞情況發生,它使用 lg 函式控制分割惡化的情況。元素個數檢查,大於16個才進行後續操作 分割層次檢查,分割層次超過指定值就使用heap sort 全部檢查...