(java实现)
问题
题目描述:
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
本题含有多组数据。
输入描述:
整数N,后续N个名字
输出描述:
每个名称可能的最大漂亮程度
示例1:
输入
2
zhangsan
lisi
输出
192
101
问题分析:
首先要理解“最大漂亮度”的值的计算方法;
其原理:字符串中的某个字符出现的频数最高的,其漂亮度为26,其余的依次递减,直到1。
如题目中的“lisi”,“i”出现的频率最高,为2;故其漂亮度为26,“l”和“s”分别为25、24;
计算过程:漂亮度=262+251+24=101.
相关知识:
1、排序函数的使用:Arrays.sort(arr);
注意:要读入的内容包含用整数和字符串的时候,要按行来去读,因为读int的时候,是读取不到换行符的。读取的例子如下:
String line = input.nextLine();
int count = Integer.parseInt(line);
算法实现:
略
参考代码:
import java.util.*;
public class Main {
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
while (input.hasNext())
{
String line = input.nextLine(); //注意
int count = Integer.parseInt(line);
for (int i=0; i<count; i++)
{
String str = input.nextLine();
char[] ch = str.toCharArray();
int[] arr = new int[27];
int sum = 0, in=0;
for (int j=0; j<ch.length; j++)
{
in = ch[j]-'a'+1;
arr[in]++; //统计
}
Arrays.sort(arr); //按频率大小来排序,频率越高,漂亮度越高
for (int j=1; j<27; j++)
{
sum = sum + j*arr[j];
}
System.out.println(sum);
}
}
}
}