题目描述:
给出一个名字,该名字有26个字符组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
本题含有多组数据。
输入描述:
整数N,后续N个名字
输出描述:
每个名称可能的最大漂亮程度
示例:
输入:
2 zhangsan lisi
输出:
192 101
解题思路:
本题可以巧妙破解,最大漂亮度其实就是让出现最多次数的字母乘26,次多的字母乘25,以此类推,这样可以使漂亮度最大化。
建立26大小的数组,存放各个字母出现的次数,然后排序,最多次数乘26,依次递减累加,得到结果。
测试代码:
#include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; int main() { int number; while(cin>>number) { vector<int> results; string str; for(int i=0;i<number;++i) { cin>>str; int sum=0; int ah[26]={0}; for(int i=0;i<str.length();++i) { if(str[i]>='a'&&str[i]<='z') ah[str[i]-'a']++; else ah[str[i]-'A']++; } sort(ah,ah+26); int k=26; for(int i=25;i>=0;--i) { sum+=ah[i]*k; k--; } results.push_back(sum); } for(auto it=results.begin();it!=results.end();++it) { cout<<*it<<endl; } } return 0; }