用c++设计一个统计选票的算法,输出每个候选人的得票结果(假设采用单链表存放选票,候选人编号依次为1,2,...N,且每张选票选且只选一人)
时间: 2024-10-09 13:02:52 浏览: 9
在C++中,我们可以使用单链表来存储选票,并通过遍历链表,为每个候选人累加选票。这里是一个简单的算法步骤:
1. 定义一个结构体 `Vote` 表示一张选票,包含一个候选人编号(比如整型变量 `candidate`)和指向下一个选票的指针 `next`。
```cpp
struct Vote {
int candidate;
Vote* next; // 指向下一个选票
};
```
2. 定义一个 `Candidate` 结构体或类表示候选人,其中包含一个计数器 `votes` 来记录得票数。
```cpp
class Candidate {
private:
int votes;
public:
// 构造函数和获取投票数的方法
Candidate(int id) : votes(0) {}
int getVotes() const { return votes; }
void incrementVotes() { votes++; }
};
```
3. 定义一个 `Poll` 类来管理所有选票和候选人,包括一个候选人的列表和链表头指针。
```cpp
class Poll {
private:
std::vector<Candidate> candidates; // 存放所有候选人
Vote* head; // 链表头指针
public:
// 添加选票方法
void addVote(int candidateId) {
Vote* current = head;
while (current != nullptr && current->candidate != candidateId) {
current = current->next;
}
if (current == nullptr) {
current = new Vote{candidateId, nullptr};
head = current;
} else {
current->incrementVotes();
}
}
// 输出每个候选人的得票结果
void printResults() {
for (const auto& candidate : candidates) {
std::cout << "Candidate " << candidate.getId() << ": " << candidate.getVotes() << " votes\n";
}
}
};
```
4. 使用 `Poll` 类,你可以创建一个实例并添加选票,最后打印出结果。
```cpp
int main() {
Poll poll;
// 添加选票示例
poll.addVote(1);
poll.addVote(2);
poll.addVote(1);
poll.addVote(3);
// ...
poll.printResults();
return 0;
}
```