Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาผู้ชนะการเลือกตั้งจากรายชื่อผู้ได้รับโหวตใน C++


บทนำ

ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมหา ผู้ชนะการเลือกตั้ง จากอาร์เรย์ชื่อผู้สมัครที่ได้รับโหวต หากโหวตเท่ากัน ให้เลือกผู้มีชื่อเรียงลำดับอักษรก่อน (Lexicographically smaller)

ตัวอย่าง

Input: {"A", "B", "C", "B", "A", "C", "D", "D", "A", "B", "D", "B", "A"}
Output: "A"
(A และ B ได้ 4 โหวตเท่ากัน แต่ A อยู่ก่อน B ในลำดับอักษร)

ขั้นตอนการแก้ปัญหา

  1. กำหนดอาร์เรย์ชื่อผู้ได้โหวต
  2. ใช้ map<string, int> นับโหวตแต่ละคน
  3. วนลูปนับโหวตทั้งหมด
  4. วนลูปผ่าน map หาคนที่โหวตมากที่สุด
  5. ถ้าโหวตเท่ากัน ให้เปรียบเทียบชื่อ (string comparison)

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

void findElectionWinner(string votes[], int total_votes) {
    map<string, int> candidate_votes_count;
    
    // นับโหวตแต่ละคน
    for (int i = 0; i < total_votes; i++) {
        candidate_votes_count[votes[i]]++;
    }
    
    // หาผู้ชนะ
    int max_votes = 0;
    string election_winner;
    
    for (auto& entry : candidate_votes_count) {
        string key = entry.first;
        int val = entry.second;
        
        if (val > max_votes) {
            max_votes = val;
            election_winner = key;
        } 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;
}

ผลลัพธ์

A

สรุป

ใช้ map นับความถี่และ string comparison แก้ไขการเสมอโหวต โค้ดสั้น กระชับ เข้าใจง่าย หากมีคำถาม สามารถถามได้ในส่วนความคิดเห็นครับ