用c++设计一个统计选票的算法,输出每个候选人的得票结果(假设采用单链表存放选票,候选人编号依次为1,2,...N,且每张选票选且只选一人)用单链表存放
时间: 2024-10-09 13:02:58 浏览: 25
面向对象程序设计
在C++中,设计一个统计选票的算法,我们可以创建一个单链表结构存储选票,同时维护一个数组来记录每个候选人的得票数。这里是一个简单的示例:
```cpp
#include <iostream>
#include <unordered_map>
// 定义一个节点结构体,用于表示选票
struct Ballot {
int candidate; // 候选人编号
struct Node *next; // 指向下一个节点
};
// 创建链表节点的构造函数
Ballot::Node* createCandidate(int candidate) {
Ballot::Node* newNode = new Ballot::Node();
newNode->candidate = candidate;
newNode->next = nullptr;
return newNode;
}
// 链表节点结构体
Ballot::Node* Ballot::Node {
std::atomic<int> count(0);
int candidate;
Ballot::Node* next;
Node(int candidate) : candidate(candidate), next(nullptr) {}
};
// 统计选票函数
void countVotes(Ballot::Node* head, int numCandidates) {
std::unordered_map<int, int> votes;
while (head != nullptr) {
if (votes.find(head->candidate) == votes.end()) {
votes[head->candidate] = 0;
}
votes[head->candidate]++;
head = head->next;
}
for (int i = 1; i <= numCandidates; ++i) {
if (votes[i]) {
std::cout << "候选人 " << i << " 得票数: " << votes[i] << std::endl;
} else {
std::cout << "候选人 " << i << " 没有获得投票" << std::endl;
}
}
}
int main() {
const int N = 5; // 假设有5位候选人
Ballot::Node* head = nullptr;
// 添加一些选票到链表
head = createCandidate(1); // 假设第1张选票投给1号候选人
head->next = createCandidate(3); // 第2张选票投给3号候选人
// ... (添加更多选票)
countVotes(head, N);
return 0;
}
```
这个程序首先初始化一个空链表,并通过`countVotes`函数遍历链表,统计每个候选人的得票数。最后,在`main`函数中创建并添加了一些示例选票。
阅读全文