c+笔记

编程入门 行业动态 更新时间:2024-10-06 14:34:55

c+<a href=https://www.elefans.com/category/jswz/34/1770047.html style=笔记"/>

c+笔记

项目介绍: 有12个参赛选手 共两轮比赛 第一轮比赛12个人分成两组 随机分组 每组6个人

每组经过角逐只留下一半的人(每组6个人变为3个人)

第二轮剩下的一共6个人作为一组角逐 分数从高到低 得出冠亚季军

淘汰规则:每个人由10位评委打分 去掉最高分和最低分 剩下的取平均分

#include <iostream>
using namespace std;
#include <vector>
#include <map>
#include <algorithm>
#include <numeric>//选手数据类型
class Person{
public:Person(int ID, string name){this->ID = ID;this->name = name;}int ID;string name;
};
//输出vector容器
void printVec(vector<Person> &v){for(vector<Person>::iterator it = v.begin();it !=v.end();it++){cout<< "编号:"<<(*it).ID << " 姓名:" << (*it).name << endl;}}
//创建选手并插入到容器中
void createPerson(vector<Person> &v){Person p1(1,"张三");Person p2(2,"李四");Person p3(3,"王五");Person p4(4,"赵六");Person p5(5,"红七");Person p6(6,"韩八");Person p7(7,"孙九");Person p8(8,"马超");Person p9(9,"蔡文姬");Person p10(10,"妲己");Person p11(11,"耀");Person p12(12,"鲁班");v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);v.push_back(p6);v.push_back(p7);v.push_back(p8);v.push_back(p9);v.push_back(p10);v.push_back(p11);v.push_back(p12);//随机打乱random_shuffle(v.begin(), v.end());
}
//返回评委打分
int getScore(){//创建一个临时容器用于存放十个评委打分vector<int>v;//开始插入十个随机数 作为十个评委打分for(int i=0;i<10;i++){int socre = rand() % 100;v.push_back(socre);}//从小到达排序sort(v.begin(), v.end());//去除最小值和最大值v.assign(v.begin()+1, v.end()-1);//用accmulate算术生成算法计算总值int total = accumulate(v.begin(),v.end(),0);//除以评委人数得到平均分并返回return total/v.size();
}//求出一组6人的前三名 并返回有序序列multimap
multimap<int,Person> winGroup(vector<Person> &v){//创建临时的容器 用于返回multimap<int,Person>mp;//遍历vector容器 并包含分数插入到multimap中for(vector<Person>::iterator it = v.begin();it !=v.end();it++){mp.insert(pair<int, Person>(getScore(),*it));}//因为multimap自动从小到大排序 删除前三个便是淘汰分数低的三人for(int i=0;i<mp.size()/2+1;i++){mp.erase(mp.begin());}return mp;
}//输出map容器
void printMap(multimap<int,Person> &mp){for(multimap<int,Person>::iterator it = mp.begin();it != mp.end();it++){cout << "分数 = " << (*it).first <<" 编号:"<< (*it).second.ID<<" 名字:" << (*it).second.name<<endl;}
}
int main(){//创建容器存放12个选手vector<Person>v;createPerson(v);//创建容器存放第一组6人vector<Person>v1;v1.assign(v.begin(), v.begin()+6);printVec(v1);cout << "---------------"<<endl;//创建容器存放第二组6人vector<Person>v2;v2.assign(v.begin()+6, v.end());printVec(v2);cout << endl;cout << "经过第一轮激烈的角逐:" << endl;//接收第一组留下的3人multimap<int,Person>mp1;mp1 = winGroup(v1);printMap(mp1);cout << "--------------"<<endl;//接收第二组留下的3人multimap<int,Person>mp2;mp2 = winGroup(v2);printMap(mp2);//清空v1和v2 把multimap数据导入到vector里//因为每组出线的三人已经确定 第一轮的分数需要抛弃 在第二轮重新计算//multimap不仅存放选手名字和编号 而且存放分数 vector只存放选手信息v1.clear();v2.clear();for(multimap<int,Person>::iterator it = mp1.begin();it != mp1.end();it++){v1.push_back((*it).second);}for(multimap<int,Person>::iterator it = mp2.begin();it != mp2.end();it++){v2.push_back((*it).second);}cout << endl;cout << "合并以后:" << endl;//合并第一轮每组留下的3个人到一个vector容器vector<Person>v_Union;v_Union.insert(v_Union.begin(), v1.begin(),v1.end());v_Union.insert(v_Union.end(), v2.begin(),v2.end());printVec(v_Union);cout << "-----------"<<endl;//得出第二轮的结果 用multimap接收multimap<int,Person>mp3;mp3 = winGroup(v_Union);cout << "最后的冠亚季军:"<<endl;//输出第二轮的冠亚季军int rank = 3;for(multimap<int,Person>::iterator it = mp3.begin();it != mp3.end();it++){cout << "第" << rank << "名是:"<<(*it).second.name << " 他的编号是: "<< (*it).second.ID<<" 他的最终分数是: " << (*it).first << endl;rank--;}return 0;
}

输出结果:

编号:7 姓名:孙九

编号:11 姓名:耀

编号:8 姓名:马超

编号:5 姓名:红七

编号:1 姓名:张三

编号:9 姓名:蔡文姬

---------------

编号:10 姓名:妲己

编号:12 姓名:鲁班

编号:2 姓名:李四

编号:4 姓名:赵六

编号:3 姓名:王五

编号:6 姓名:韩八

经过第一轮激烈的角逐:

分数 = 44 编号:8 名字:马超

分数 = 45 编号:5 名字:红七

分数 = 68 编号:1 名字:张三

--------------

分数 = 48 编号:12 名字:鲁班

分数 = 50 编号:6 名字:韩八

分数 = 58 编号:3 名字:王五

合并以后:

编号:8 姓名:马超

编号:5 姓名:红七

编号:1 姓名:张三

编号:12 姓名:鲁班

编号:6 姓名:韩八

编号:3 姓名:王五

-----------

最后的冠亚季军:

第3名是:红七 他的编号是: 5 他的最终分数是: 51

第2名是:王五 他的编号是: 3 他的最终分数是: 52

第1名是:鲁班 他的编号是: 12 他的最终分数是: 54

更多推荐

c+笔记

本文发布于:2024-02-27 23:31:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1767150.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:笔记

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!