题目描述
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
本题含有多组数据。
输入描述:
整数N,后续N个名字
输出描述:
每个名称可能的最大漂亮程度
示例1
输入
2
zhangsan
lisi
输出
192
101
题目分析
这道题目很简单,但是在理解题意层次上一定要仔细,这道题才做的时候我竟然没读懂题还跳过了…
//26个字符串组成
#include<vector>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
vector<pair<int,char> > v;
int cnt[30]={0};
int main(){
int num;
while(cin>>num){
while(num--){
string s;
cin>>s;
for(int i=0;i<s.size();i++) s[i]=toupper(s[i]);//全部转化为大写处理
for(int i=0;i<s.size();i++){//字符个数统计
cnt[s[i]-65]--;//对个数取反,后面就可以逆序排序
}
sort(cnt,cnt+30);
int sum=0,k=26;
for(int i=0;i<30&&cnt[i]!=0;i++){
sum+=(0-cnt[i])*k;
k--;
}
cout<<sum<<"\n";
for(int i=0;i<30;i++) cnt[i]=0;
}
}
return 0;
}