A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© naceyeve 中级黑马   /  2015-11-24 01:00  /  682 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

从键盘接受一个字符串,每个字母可自由匹配1-26值,求这个字符串所能达到的最大数(最完美度)
这是个编程题目,对这道题目的解析出现障碍了,以下是某人提供的答案,如果每个字母都匹配26,再相乘相加,完全没有必要排序,
只要得出字符串长度,长度乘以26就是最大值了。
哪位大神能做出来吗?卡壳了,求神助功。。。。。。


  1. public class Demo33 {
  2.         public static void main(String[] args) {
  3.                 MyScanner();
  4.         }

  5.         public static void MyScanner() {  //设置从键盘录入.
  6.                 Scanner s = new Scanner(System.in);
  7.                 while(true)
  8.                 {
  9.                         String str = s.nextLine();
  10.                         if(str.equals("over"))
  11.                         {
  12.                                 System.out.println("输入结束");
  13.                                 break;
  14.                         }
  15.                         else
  16.                         {
  17.                                 char[] ch = str.toCharArray();
  18.                                 ListArray(ch);  //获取到该字符串的字符数组,
  19.                         }
  20.                 }
  21.         }

  22.         public static void ListArray(char[] ch) {  //遍历该字符数组,将字符和对应出现次数存入map集合.
  23.                 Map<Character,Integer> ma = new HashMap<Character,Integer>();
  24.                 for(int x = 0; x < ch.length ; x ++)
  25.                 {
  26.                         int n = 0;
  27.                         for(int y = 0; y < ch.length; y ++)
  28.                         {
  29.                                 if(ch[x] == ch[y])
  30.                                 {
  31.                                         n ++;
  32.                                 }       
  33.                         }
  34.                         if(ma.containsKey(ch[x]))
  35.                         {
  36.                                 continue;
  37.                         }else
  38.                         {
  39.                                 ma.put(ch[x], n );
  40.                         }
  41.                 }
  42.                 ListMap(ma);  //将map作为参数传递.
  43.         }

  44.         public static void ListMap(Map<Character, Integer> ma) {  //遍历map集合,并获取value值.
  45.                 Set<Entry<Character,Integer>> se = new HashSet<Entry<Character,Integer>>();
  46.                 int[] in = new int[ma.size()];  //创建一个和map元素数相同的数组.
  47.                 se = ma.entrySet();
  48.                 Iterator<Entry<Character,Integer>> it = se.iterator();
  49.                 int n = 0;
  50.                 while(it.hasNext())
  51.                 {
  52.                         Entry en = it.next();
  53.                         in[n] = (Integer) en.getValue();  //将value值存入int数组.
  54.                         n ++;
  55.                 }
  56.                 Arrays.sort(in); //排序数组.
  57.                 int num = 0;
  58.                 System.out.println(Arrays.toString(in));
  59.                 for(int x = in.length -1, y = 26; x >= 0; x --, y --)  //倒着赋值.
  60.                 {
  61.                         num += in[x]* y;  //累加.
  62.                 }
  63.                 System.out.println(num);  //将结果打印.
  64.         }
  65. }
复制代码



3 个回复

倒序浏览
如果看成每个字母与数值是一一对应的关系,用MAP来做,应该可以~
回复 使用道具 举报
题目本身就有问题
回复 使用道具 举报
我也不会做啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马