题目如下:
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。 每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。 给出多个名字,计算每个名字最大可能的“漂亮度”。 输入: 整数N,后面N个名字,如 2 zhangsan lisi 输出: 每个名字对应的最大漂亮程度 如:192 101分析:名字的漂亮度=26*字母个数最多的+25*字母个数其次的+24*字母个数再其次的(忽略大小写)+....+1*出现次数最小的。
要从以下几点入手:
1.统计字符的个数
2.升序排列或降序排列
3.计算漂亮度
知识点:
1.使用Scanner类输入数据
(1)public String next() :接收键盘输入的内容(注意如果带空格,只能取出空格之前的数据)
(2)public int nextInt() :接收键盘输入的数字
(3)public boolean hasNextXxx() :判断输入的是int型还是float型。hasNextInt(),hasNextfloat()。
2.toCharArray(),只能针对字符串有这个方法,Scanner类是没有这种方法的
3.关于Map接口,要想使用此接口,必须依靠子类实例化
如:Map<Character,Integer> map=new HashMap<Character,Integer>();
Map接口中的方法:
public boolean containsKey(Object key);判断集合中是否存在指定的key
public boolean containsValue(Object value);判断集合中是否存在指定的value
put(key,value);向集合中增加内容
get(key);根据key找出对应的value
public static interface Map.Entry<K,V>接口专门用来保存key->value的内容,之后可以用getKey()和getValue()进行key与value的分离
Map.Entry接口中的方法:
public K getKey();取得key
public V getValue();取得value
关于entrySet()方法,能够将Map集合中的映射关系取出,存入Set集合中
如:Set<Map.Entry<String,String>> set=map.entrySet();
关于Collections类中的sort()方法
sort()方法可以对集合进行排序,但要求集合中每个对象所在的类必须实现Comparable接口。而且要把对象传进去
String类本身已经实现好了Comparable接口。如果是一个自定义的类,一定要实现Comparable接口。
如:Collections.sort(list,new StrLenComparator());
import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Scanner;public static class TestBeauty2{ public static void main(String[] args) { Scanner cin=new Scanner(System.in); int N=cin.nextInt();/*接收键盘输入的数字,就是表示有几个字母,即有几个字符串*/ String[] names=new String[N];//构建字符串数组 TestBeauty2 tb=new TestBeauty2(); for(int i=0;imap=new HashMap ();//要想使用Map接口,必须依靠子类实例化 for(int i=0;i > list=new ArrayList >(map.entrySet()); Collections.sort(list,new Comparator >(){ public int compare(Map.Entry o1,Map.Entry o2){ return o2.getvalue().compareTo(o1.getvalue());//按自然排序,降序 } }); //计算漂亮度=26*字母数最多的+25*次多的+... int result=0; for(int i=0;i