一、说明
共有ABCDE五名选手,十名评委分别对其打分;
每名选手分别去掉其最高分和最低分,算出平均分。
二、思路
先建立一个类:选手,选手属性有:
姓名和分数。
首先可以创建一个vector容器,里面存放五个人的信息;
然后将五个人的分数分别放到一个deque容器中,
再对其进行排序,删除头元素和尾元素,
即可算出平均分。
三、代码
main函数:
int main()
{
//随机数种子
srand((unsigned)time(NULL));
//创建选手容器
vector<Person> v;
createPerson(v);
//打分
setScore(v);
//展示分数
showScore(v);
}
Person类:
class Person
{
public:
string name;
int score;
public:
Person(string name, int score)
{
this->name = name;
this->score = score;
}
};
创建选手组:
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);
}
}
这里巧妙地运用了string的字符串追加技巧。
打分:
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++)
{
int score = rand() % 41 + 60;
d.push_back(score);
}
cout << "姓名:" << it->name << " 打分:";
for (deque<int>::iterator dit = d.begin(); dit != d.end(); dit++)
{
cout << *dit << " ";
}
cout << endl;
sort(d.begin(), d.end());
d.pop_front();
d.pop_back();
//取平均分
int sum = 0;
for (deque<int>::iterator dit = d.begin(); dit != d.end(); dit++)
{
sum += *dit;
}
int avg = sum / d.size();
it->score = avg;
}
}
展示分数:
void showScore(vector<Person>& v)
{
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
{
cout << "姓名:" << it->name << " 分数:" << it->score << endl;
}
}
运行截图:
四、总结
vector容器存放类,deque容器来对数据进行操作,二者结合真的很好用,并且STL容器结合算法大大提高了程序复用性。妙啊!但作为程序员,还是需要深剖一下底层代码,不能做调包侠。