首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

ACM 題目解析:選票統計(山東理工大學 1294)

     編輯:關於C語言

題目大意

有 m 位候選人(編號 1~m,0),n 位學生投票(0)。每位學生投一票給某候選人。統計得票最高者之編號與票數(若並列最高,題目未明確規定,通常取編號較小者)。

輸入輸出範例

輸入:
3 10 1 2 3 2 3 1 2 3 1 3

輸出:
3
4

說明:3 位候選人,10 張選票。候選人 1 得 3 票、2 得 3 票、3 得 4 票 → 號碼 3 當選,得票 4。

解題策略

  1. 建立長度 m+1 的整數陣列 votes[],索引 1~m 對應候選人,初始化為 0。
  2. 讀取 n 個投票編號,對應 votes[id]++。
  3. 遍歷陣列找出最大值與其索引。
  4. 輸出索引與最大值,各佔一行。

參考程式碼(C 語言)

#include <stdio.h>

int main() {
    int m, n;
    if (scanf("%d %d", &m, &n) != 2) return 0;
    int votes[1001] = {0};   // m < 1000
    for (int i = 0; i < n; ++i) {
        int id; scanf("%d", &id);
        if (id >= 1 && id <= m) votes[id]++;
    }
    int max_votes = -1, winner = 0;
    for (int i = 1; i <= m; ++i) {
        if (votes[i] > max_votes) {
            max_votes = votes[i];
            winner = i;
        }
    }
    printf("%d\\n%d\\n", winner, max_votes);
    return 0;
}

關鍵點備註

  • 陣列大小設為 1001 即可覆蓋 m≤1000。
  • 輸入可能跨行,scanf 自動跳過空白字元,無需逐行讀取。
  • 若有多位候選人同票最高,上述程式會輸出編號最小者(因遍歷順序為 1→m)。
  • 時間複雜度 O(n+m),空間 O(m),滿足題目限制。

延伸思考

若需處理平票規則(如編號大者優先、或需輸出所有最高票候選人),只需調整比較邏輯或改為二次掃描即可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved