1. 程式人生 > >名字的漂亮度/華為機試(C/C++)

名字的漂亮度/華為機試(C/C++)

題目描述

給出一個名字,該名字有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;
}