基于C++的活动评委打分——STL案例

功能要求:
有五名选手,选手ABCDE,10个评委分别对每一名选手打分,去除最高分,去除最低分,去平均分

实现步骤:
1、创建五名选手,放在vector容器中
2、遍历vector容器,取出来每一个选手,执行for循环,可以将10个评委打分存在deque容器中
3、sort算法对deque容器中分数排序,去除最高和最低分
4、deque容器遍历一遍,累加总分,
5、获取平均分

示例:

#include<iostream>
using namespace std;
#include<deque>
#include<vector> 
#include<string> 
#include<algorithm>
#include<ctime>  

//选手类
class Person{
	public:
		string m_Name; //姓名 
		int m_Score;  //成绩 
		Person(string name,int score){  //构造函数 
			this->m_Name = name;
			this->m_Score = score;
		}	
}; 

//创建一个Vector容器去存储每个选手的信息 
void createPerson(vector<Person>&v){
	string nameSeed = "ABCDE";
	for(int i = 0;i<5;i++){
		string name = "选手";
		name+=nameSeed[i];  
		int score = 0;
		Person p(name,score);
		v.push_back(p); //将创建的person对象放入容器中 
    }
}

//设计打分机制,修改平均分
void setScore(vector<Person>&v){
	for(vector<Person>::iterator it = v.begin();it!=v.end();it++){
		//将评委的分数放入deque容器中
		deque<int>d;
		for(int i=0;i<10;i++){  //10g个评委 
		   int score = rand()%41+60;// 随机输出60---100 
		   d.push_back(score);	 //向deque容器插入评委分数 
		} 
		
		cout<<"选手:"<<it->m_Name<<"打分: "; 
		for(deque<int>::iterator dit = d.begin();dit!=d.end();dit++){
			cout<<*dit<<"  ";   //打印评委打分  
		}
		cout<<endl;
		
		//排序
		sort(d.begin(),d.end());
		
		//去除最高分和最低分
		d.pop_back();
		d.pop_front();
		
		//取平均分
		int sum = 0;
		for(deque<int>::iterator dit = d.begin();dit!=d.end();dit++){
			sum += *dit; //累加每一评委的分数 
		} 
		int avg = sum/d.size();//算出评委的平均分 
		
		//将对应的平均分赋值给选手
		it->m_Score = avg; 	   
	}
}

//显示平均分 
void showScore(vector<Person>&p){
	for(vector<Person>::iterator it=p.begin();it!=p.end();it++){
		cout<<"姓名: "<<it->m_Name<<"平均分: "<<it->m_Score<<endl; 
	}
}

void test01(){
	//随机数种子
	srand((unsigned int)time(NULL)); 
	
	//1 创建五名选手
	vector<Person>v; //存放选手的容器
	createPerson(v); 
	
	//2 给五名选手打分
	setScore(v);
	 
	//3 显示最后得分 
	showScore(v); 
} 

int main(){
    test01();
	system("pause");
	return 0; 
} 

输出样式:
在这里插入图片描述

发布了31 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/souhanben5159/article/details/103941934