今天來解YKL32(UVA10008):What's Cryptanalysis?
題目的Input和Output就很值觀
使用 sort() 函數對 vector 進行排序。排序規則如下:
如果兩個字母的出現次數相同,則按照字母表順序進行排序(a.first < b.first)。
如果出現次數不同,則按照出現次數從大到小排序(a.second > b.second)。
sort(letterVec.begin(), letterVec.end(), [](const pair<char, int>& a, const pair<char, int>& b) {
if (a.second == b.second) {
return a.first < b.first;
}
return a.second > b.second;
});
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <ctype.h>
using namespace std;
int main() {
int n;
cin >> n;
map<char, int> letter;
while (n>=0) {
string str;
getline(cin, str);
for (int i = 0; i < str.size(); i++) {
if (isalpha(str[i])) {
letter[toupper(str[i])]++;
//cout << "text : " << str[i] << endl;
}
}
n--;
}
// 將 map 轉換為 vector 來排序
vector<pair<char, int>> letterVec(letter.begin(), letter.end());
// 根據出現次數由大到小排序;如果次數相同,按字母表順序排序
sort(letterVec.begin(), letterVec.end(), [](const pair<char, int>& a, const pair<char, int>& b) {
if (a.second == b.second) {
return a.first < b.first;
}
return a.second > b.second;
});
for (const auto& pair : letterVec) {
cout << pair.first << " " << pair.second << endl;
}
return 0;
}