题目
描述 | 给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。给出多个名字,计算每个名字最大可能的“漂亮度”。 |
---|---|
输入 | 整数N,后续N个名字 N个字符串,每个表示一个名字 |
输出 | 每个名称可能的最大漂亮程度 |
样例输入 | 2 zhangsan lisi |
样例输出 | 192 101 |
思路
最大漂亮度,把出现频率最高的赋予最大的权值即可。
代码
//名字的漂亮度
#include <iostream>
#include <algorithm>
using namespace std;
int Name_Beauty(char a[])
{
int b[26]= {0};//initial value 0
for(int i=0; a[i]!='\0'; ++i)
{
a[i]=tolower(a[i]);//change to lower case
b[a[i]-97]++;//counter number
}
sort(b,b+26);
int sum=0;
for(int i=0; i<26; ++i)
{
sum+=(i+1)*b[i];
}
return sum;
}
int main()
{
int n=0;
cin>>n;
char array[100][100];
cin.ignore();//ignore \n
for (int i=0; i<n; ++i)
{
cin>>array[i];
}
for (int i=0; i<n; ++i)
{
cout<<Name_Beauty(array[i])<<endl;
}
return 0;
}