#其实就是计算出各个字母出现的次数,出现次数最多的字母的“漂亮度”最大(26),后面按次数依次递减 while True: try: n=int(input()) s=[] for i in range(n): s.append(input()) res=[0]*n for i in range(n): temp=set(list(s[i])) d=[] for j in temp: d.append(s[i].count(j))#记录每个单词中每一个字母出现的次数 d.sort(reverse=True)#对每个字母出现的次数从大到小排序 for k in range(len(d)): res[i]=res[i]+d[k]*(26-k) for i in range(n): print(res[i]) except: break
#include <iostream> #include <algorithm> using namespace std; int main(){ int n; while(cin >> n){ while(n--){ string str; cin >> str; int i,temp[26]={0},k=26,res=0; for(i=0;i<str.length();i++){ if(str[i]>='a' && str[i]<='z') temp[str[i]-'a']++; else temp[str[i]-'A']++; } sort(temp,temp+26); for(i=25;i>=0;i--){ res+=temp[i]*k--; } cout << res << endl; } } return 0; }