名字的漂亮度
题目描述
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
输入描述:
整数N,后续N个名字
输出描述:
每个名称可能的最大漂亮程度
输入例子:
2
zhangsan
lisi
输出例子:
192
101
解答代码:
#include<iostream>
#include<fstream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
void sortA(int array[])
{
int i,j;
int index=0;
for(i=0; i<26-1; i++)
{
index=i;
for(j=i+1; j<26; j++)
{
if(array[j]>array[index])
index=j;
}
int temp=array[i];
array[i]=array[index];
array[index]=temp;
}
}
int main()
{
char words[10000];
//数据表统计各个字母出现的次数
int wordsCount[26];
int n,i,j;
while(cin>>n)
{
for(int k=0; k<n; k++)
{
cin>>words;
//memset(wordsCount,0,sizeof(wordsCount));
for(i=0; i<26; i++)
wordsCount[i]=0;
int length=strlen(words);
int result=0;
int data=26;
for(i=0; i<length; i++)
{
if(words[i]>='A' && words[i]<='Z')
wordsCount[words[i]-'A']++;
else if(words[i]>='a' && words[i]<='z')
wordsCount[words[i]-'a']++;
}
sortA(wordsCount);
for(i=0; i<26; i++)
{
if(wordsCount[i]!=0)
{
result+=data*wordsCount[i];
data--;
}
else
break;
}
cout<<result<<endl;
}
}
return 0;
}