名字的漂亮度=26*字母个数最多的+25*字母个数其次的+24*字母个数再其次的(忽略大小写)+….+1*出现次数最小的。
输入:整数N,N个字符串
输出:N个字符串漂亮度
例如:
输入1 a
输出 26
c
#include<iostream>
#include<string>
#include<cctype>
#include<algorithm>
using namespace std;
bool cmp(int a, int b)
{
return a>b;
}
int meili(const string &str)
{
int a[26]={0};
int len=0,pos;
for(int i=0;i<str.size();i++)
{
if(isupper(str[i]))
pos=str[i]-65;
else
pos=str[i]-97;
a[pos]++;
}
sort(a,a+26,cmp);
for(i=0;a[i]!=0;i++)
{
len+=(26-i)*a[i];
}
return len;
}
int main(int argc,char *argv[])
{
int n;
cin>>n;
int *len=new int[n];
string str;
for(int i=0;i<n;i++)
{
cin>>str;
len[i]=meili(str);
}
for(i=0;i<n;i++)
cout<<len[i]<<endl;
delete []len;
return 0;
}
java
import java.util.Arrays;
import java.util.Scanner;
public class nameMei {
public int meili(String str) {
int[] a = new int[26];// 默认值为0
int len = 0, pos;
for (int i = 0; i < str.length(); i++) {
if (Character.isUpperCase(str.charAt(i)))
pos = str.charAt(i) - 65;
else
pos = str.charAt(i) - 97;
a[pos]++;
}
Arrays.sort(a);//从小到大
for (int i = 25; a[i] != 0; i--)
len += (i+1) * a[i];
return len;
}
public static void main(String[] args) {
nameMei nm = new nameMei();
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int[] len = new int[n];
String str;
for (int i = 0; i < n; i++) {
Scanner ss = new Scanner(System.in);
str = ss.nextLine();
len[i] = nm.meili(str);
}
for (int i = 0; i < n; i++)
System.out.println(len[i]);
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/wtyvhreal/article/details/46662045