(C++)(要求能实现多组输入)完成一个对候选人得票的统计程序。候选人人数不定,但没有重名的。 使用结构体存储每一个候选人的名字、得票数、第一张和最后一张得票的序号(从 1 数)。记录每一张选票的得票人名,输出得票最多、得票第二多和得票最少的候 选人信息。 输入描述: 第一行有一个整数 n,表示以下有 n 张选票信息将会输入。n 不大于 100。 以后的 n 行中,每一行包含一个人名,为选票的得票人。保证每一个人名都是 唯一的。 输出描述: 有三行,分别为得票最多和得票最少的信息。格式为首先输出人名,其后输出 一个冒号,输出候选人的得票数、第一张和最后一张得票的序号,空格隔开。 (若票数相同,名字短的优先,若名字长度也相同,逐字符比较 ASCII 码,小 的优先。) 输入样例: 10 Li Li Fun Zhang Zhang Fun Li Hu Zhang Li 输出样例: Li:4 1 10 Hu:1 8 8
时间: 2024-01-24 08:20:48 浏览: 84
C++统计票数的实现源码
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct Candidate {
string name;
int votes;
int first;
int last;
};
bool cmp(const Candidate& a, const Candidate& b) {
if (a.votes != b.votes) return a.votes > b.votes;
if (a.name.size() != b.name.size()) return a.name.size() < b.name.size();
return a.name < b.name;
}
int main() {
int n;
while (cin >> n) {
vector<Candidate> candidates(n);
for (int i = 0; i < n; i++) {
cin >> candidates[i].name;
candidates[i].votes = 0;
candidates[i].first = candidates[i].last = -1;
}
string name;
while (cin >> name) {
for (int i = 0; i < n; i++) {
if (candidates[i].name == name) {
candidates[i].votes++;
if (candidates[i].first == -1) candidates[i].first = candidates[i].last = i + 1;
else candidates[i].last = i + 1;
break;
}
}
}
sort(candidates.begin(), candidates.end(), cmp);
cout << candidates[0].name << ":" << candidates[0].votes << " " << candidates[0].first << " " << candidates[0].last << endl;
cout << candidates[1].name << ":" << candidates[1].votes << " " << candidates[1].first << " " << candidates[1].last << endl;
cout << candidates[n - 1].name << ":" << candidates[n - 1].votes << " " << candidates[n - 1].first << " " << candidates[n - 1].last << endl;
}
return 0;
}
```
阅读全文