问题
1189: 选票统计(二)(结构体专题)
时间限制: 1 Sec 内存限制: 128 MB
提交: 3392 解决: 2188
计算机与通信工程学院2012届学生会主席投票选举工作定于1月6日在电教楼前隆重举行。本次投票将采用电脑统计选票的方式,当投票选举正式开始后,同学们将排队一一走到电脑前,投上自己神圣的一票:在电脑前输入一个姓名,然后输入回车表示确认。
当所同学投票结束,工作人员只需要输入一个”#”并回车确认,表示投票结束,电脑立即显示出得票最高的同学姓名,该同学将当选为新一届计算机与通信工程学院学生会主席。
选举大会的准备工作正在紧张进行,编程统计投票的工作就交给你了。
输入
本题为单实例测试。输入包含多行,每行是一个由小写英文字母组成的字符串,表示一个姓名,遇到#时表示输入结束。 你可以假定,参加投票学生的人数不超过500人,每个学生姓名字符串的长度小于20。
输出
输出为一个字符串——当选为学生会主席的学生姓名
样例输入 Copy
wanglin
liming
wanglin
wanglin
fangfang
liming
样例输出 Copy
wanglin
代码
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct STU {
string name;
unsigned int votes;
};
void voteStage();
void printRes();
vector<STU> stu_vec;
int main() {
voteStage();
// vote 阶段
printRes();
return 0;
}
// vote 阶段的函数
void voteStage()
{
int find_flag = 0;
string name_input;
cin >> name_input;
while (!(name_input == "#")) {
find_flag = 0;
for (auto it = stu_vec.begin(); it != stu_vec.end(); it++) {
if (name_input == (*it).name) {
find_flag = 1;
(*it).votes += 1;
break;
}
}
if (find_flag == 0) {
STU temp{ name_input, 1 }; // 放入容器时,初始票数为 1
stu_vec.push_back(temp);
}
cin >> name_input;
}
}
void printRes()
{
int max = 0;
string name_chair = "";
for (auto it = stu_vec.begin(); it != stu_vec.end(); it++) {
if ((*it).votes > max) {
max = (*it).votes;
name_chair = (*it).name;
}
}
cout << name_chair << endl;
// for (auto it = stu_vec.begin(); it != stu_vec.end(); it++) {
// cout << (*it).name << "\t\t" << (*it).votes << endl;
// } // 测试用
}
小结
再接再厉,理论加实践。循序渐进,均衡各科,重在专注和坚持,行动起来!