【題解】ZeroJudge c044: 10008 – What’s Cryptanalysis

【題目敘述】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
分享本文 Share with friends