又到了班长选举的大日子,学了编程的你,除了上台表演,还希望帮老师解决统计票数这个超级难题,电脑肯定效率高并且不会作弊; 总共有n个同学进行投票,参加选举的同学每人用一个小写英文字母作为代号,投票过程记录为一串字符。如果有两个或者以上的同学得票一样,谁的编号字典序靠前,谁就能当选! 班主任和同学们都想一秒钟知道谁是班长,请你编程统计出答案! c++实现
时间: 2023-06-18 22:06:07 浏览: 47
以下是一个简单的 C++ 实现,使用了哈希表来统计每个同学得票数,并按照字典序排序输出结果:
```cpp
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
string votes;
unordered_map<char, int> voteCount;
vector<char> candidates;
cin >> n >> votes;
for (auto c : votes) {
if (voteCount.find(c) == voteCount.end()) {
voteCount[c] = 1;
candidates.push_back(c);
} else {
voteCount[c]++;
}
}
sort(candidates.begin(), candidates.end(), [](char a, char b) {
if (voteCount[a] != voteCount[b]) {
return voteCount[a] > voteCount[b];
}
return a < b;
});
cout << candidates[0] << endl;
return 0;
}
```
首先,我们读入投票人数和投票记录。然后,我们创建一个哈希表 `voteCount` 来统计每个同学的得票数,并使用一个数组 `candidates` 来存储参选同学的代号。接着,我们遍历投票记录,对每个同学的得票数进行统计,如果该同学还没有被记录在哈希表中,则将其加入 `candidates` 数组中。最后,我们按照得票数从高到低、字典序从小到大的顺序对 `candidates` 数组进行排序,并输出得票最高的同学的代号。
需要注意的是,我们在排序时使用了一个 lambda 表达式来指定排序规则。如果两个同学得票数不同,则得票数高的同学排在前面;如果得票数相同,则代号字典序小的同学排在前面。
此外,我们也可以使用 `pair<char, int>` 类型的数组来存储每个同学的代号和得票数,并使用 `sort` 函数来排序,但使用哈希表的实现更加简洁。