名字的漂亮度/華為機試(C/C++)
阿新 • • 發佈:2018-12-09
題目描述
給出一個名字,該名字有26個字串組成,定義這個字串的“漂亮度”是其所有字母“漂亮度”的總和。 每個字母都有一個“漂亮度”,範圍在1到26之間。沒有任何兩個字母擁有相同的“漂亮度”。字母忽略大小寫。 給出多個名字,計算每個名字最大可能的“漂亮度”。
輸入描述:
整數N,後續N個名字
輸出描述:
每個名稱可能的最大漂亮程度
示例1
輸入
2 zhangsan lisi
輸出
192 101
程式碼:
//第四十三題 名字的漂亮度 #include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; int main() { int nName; while (cin >> nName) { vector<string>vNames; string temp; for (int i = 0; i < nName; i++) { cin >> temp; vNames.push_back(temp); } size_t iMax = vNames.size(); for (int i = 0; i < iMax; i++) { vector<int>vNum; int pNum[26]{ 0 }; int sum = 0; size_t iLength = vNames[i].length(); for (int j = 0; j < iLength; j++) { if (isupper(vNames[i][j])) pNum[vNames[i][j] - 'A']++; else if (islower(vNames[i][j])) pNum[vNames[i][j] - 'a']++; else cout << "error" << endl; } for (int k = 0; k < 26; k++) if (pNum[k]) vNum.push_back(pNum[k]); sort(vNum.begin(), vNum.end(), isgreater<int,int>); size_t kMax = vNum.size(); for (int k = 0; k < kMax; k++) sum += (26 - k)*vNum[k]; cout << sum << endl; } } return 0; }