【題目敘述】https://zerojudge.tw/ShowProblem?problemid=c044
【解題想法】
- 使用 getline(cin, s); 讀進整行「包含空白字元」的字串,也包含換行符號。
- (Line-21) 混用 cin 和 getline( ) 時,cin >> n; 讀入第一行的數字 n 後,行尾的換行符號 (\n) 還在資料緩衝區,須清空。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool cmp(pair<int, char> a, pair<int, char> b) {
if (a.first != b.first) return a.first > b.first;
else return a.second < b.second;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
vector <pair<int, char> > v(26);
for (int i = 0; i < 26; i++) {
v[i] = {0, 'A'+i};
}
int n;
string s;
cin >> n;
getline(cin, s); // clear buffer (\n)
while (n--) {
getline(cin, s);
for (int i = 0; i < s.size(); i++) {
if ('A' <= s[i] && s[i] <= 'Z') {
v[s[i] - 'A'].first++;
}
if ('a' <= s[i] && s[i] <= 'z') {
v[s[i] - 'a'].first++;
}
}
}
sort(v.begin(), v.end(), cmp);
for (auto i: v) {
if (i.first > 0) cout << i.second << " " << i.first << "\n";
}
return 0;
}
Python code
while True:
try:
n = int(input())
dic = {}
for i in range(n):
string = input()
for c in string:
c = c.lower()
if not c.isalpha():
continue
if c not in dic.keys():
dic[c] = 1
else:
dic[c] += 1
for k, v in sorted(dic.items(), key = lambda x:(-x[1], ord(x[0]))):
print(k.upper(), v)
except:
break