有 m 位候選人(編號 1~m,0n 位學生投票(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。
m+1 的整數陣列 votes[],索引 1~m 對應候選人,初始化為 0。n 個投票編號,對應 votes[id]++。#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;
}
m≤1000。scanf 自動跳過空白字元,無需逐行讀取。O(n+m),空間 O(m),滿足題目限制。若需處理平票規則(如編號大者優先、或需輸出所有最高票候選人),只需調整比較邏輯或改為二次掃描即可。