Trong hướng dẫn này, ta sẽ viết chương trình tìm người thắng cử. Ta có mảng phiếu bầu mà mỗi ứng viên nhận được. Hãy xem ví dụ.
Đầu vào
{"A", "B", "C", "B", "A", "C", "D", "D", "A", "B", "D", "B", "A", "C", "D"}
Đầu ra
A
Ở đây, A và B nhận được số phiếu bằng nhau. Trong trường hợp này, người thắng được chọn dựa trên thứ tự bảng chữ cái của tên.
Hãy xem các bước giải quyết.
- Khởi tạo mảng chuỗi với dữ liệu mẫu.
- Khởi tạo map với key là string và value là int.
- Duyệt mảng phiếu bầu và đếm phiếu cho mỗi ứng viên. Dùng map lưu số phiếu.
- Sau khi có số phiếu, duyệt map để tìm key có số phiếu lớn nhất.
- Nếu hai ứng viên bằng phiếu, so sánh tên theo thứ tự bảng chữ cái.
- In người thắng cử.
Ví dụ
Xem mã dưới đây:
#include "bits/stdc++.h" using namespace std; void findElectionWinner(string votes[], int total_votes) { map<string, int> candidate_votes_count; // đếm phiếu cho mỗi người for (int i = 0; i < total_votes; i++) { candidate_votes_count[votes[i]]++; } // tìm người thắng int max_votes = 0; string election_winner; for (auto& entry : candidate_votes_count) { string key = entry.first; int val = entry.second; // kiểm tra phiếu với max_votes if (val > max_votes) { // cập nhật max_votes và ứng viên max_votes = val; election_winner = key; // so sánh tên nếu phiếu bằng nhau } else if (val == max_votes && election_winner > key) { election_winner = key; } } cout << election_winner << endl; } int main() { string votes[] = {"A", "B", "C", "B", "A", "C", "D", "D", "A", "B", "D", "B", "A"}; findElectionWinner(votes, 13); return 0; }
Đầu ra
Nếu thực thi chương trình trên, bạn sẽ nhận được kết quả sau:
A
Kết luận
Nếu bạn có thắc mắc, hãy đề cập trong phần bình luận.