您的位置:首页 > 其它

华为机试—名字的漂亮度

2015-06-27 16:04 363 查看
名字的漂亮度=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
;
    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
;

        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]);

    }

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: