题目描述
给出一个名字,该名字有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;
}