題目描述
期末考試即將來臨,小T由于同時肩負了學習、競賽、班團活動等多方面的任務,一直沒有時間好好整理他的課桌抽屜,為了更好地復習,小T首先要把課桌抽屜里的書分類整理好。
小T的抽屜里堆著 N 本書,每本書的封面上都印有學科名稱,學科名稱用一個字符串表示,如語文學科的書封面上都印有“chinese”。現在,你的任務是幫助小T找出哪個學科的書最多?
輸入
第一行包含一個自然數 N(0<N≤1000)表示抽屜中書的總數。
接下來 N 行每行包含一本書的學科名稱,學科名稱是一個長度不超過 15 的由小寫英文字母組成的字符串。
輸出
僅有一行包含一個字符串,表示最多的那種書的學科名稱。
數據保證答案一定是唯一的。
樣例
輸入
5
english
chinese
physics
chinese
chinese
輸出
chinese
說明
【樣例解釋】
小T課桌抽屜里共有 5 本書,其中有 3 本是語文學科的,英語學科和物理學科各有 1 本,所以最多的是語文學科的書,應輸出“chinese”。
【數據范圍】
30% 的數據滿足:1≤N≤10,學科名稱為長度不超過 2 的僅包含英文小寫字母的字符串;
100% 的數據滿足:1≤N≤1000,學科名稱為長度不超過 15 的僅包含英文小寫字母的字符串;
代碼1
#include <iostream>
#include <map>
using namespace std;int main() {int n;cin >> n;map<string, int> subjectCounts;for (int i = 0; i < n; i++) {string subject;cin >> subject;subjectCounts[subject]++;}string maxSubject;int maxCount = 0;for (const auto& count : subjectCounts) {if (count.second > maxCount) {maxSubject = count.first;maxCount = count.second;}}cout << maxSubject << endl;return 0;
}
該代碼首先讀入輸入的n,并創建一個map
對象subjectCounts
來存儲每個學科及其出現次數。接下來,使用一個循環讀取每本書的學科名稱,使用subjectCounts[subject]++
來增加對應學科的出現次數。
然后,我們通過遍歷subjectCounts
找到出現次數最多的學科名稱和對應的出現次數。我們使用兩個變量maxSubject
和maxCount
來記錄出現次數最多的學科名稱和出現次數。如果有多個學科出現次數最多,則我們僅保留字典碼最大的學科名稱。
最后,我們輸出maxSubject
,即出現次數最多的學科名稱。
代碼2
#include <iostream>
#include <unordered_map>
using namespace std;int main() {int n;cin >> n;unordered_map<string, int> subjectCounts;string maxSubject;int maxCount = 0;for (int i = 0; i < n; i++) {string subject;cin >> subject;subjectCounts[subject]++;if (subjectCounts[subject] > maxCount) {maxSubject = subject;maxCount = subjectCounts[subject];}}cout << maxSubject << endl;return 0;
}
該代碼首先讀入輸入的n,并創建一個unordered_map
對象subjectCounts
來存儲每個學科及其出現次數。我們還定義了兩個變量maxSubject
和maxCount
來記錄出現次數最多的學科名稱和出現次數。
接下來,使用一個循環讀取每本書的學科名稱,并在subjectCounts
中增加對應學科的出現次數。同時,我們通過比較當前學科的出現次數與maxCount
來更新出現次數最多的學科名稱和出現次數。
最后,我們輸出maxSubject
,即出現次數最多的學科名稱。
這種方法使用了unordered_map
來存儲學科及其出現次數,使用一個循環遍歷每本書,并實時更新出現次數最多的學科。它更加直觀和通俗,不需要使用map
和手動比較字典碼大小。