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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© godmmm 高级黑马   /  2014-11-27 19:33  /  1319 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 godmmm 于 2014-11-27 19:34 编辑

题目:我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同, 而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。 现在给定一个字符串,输出它的最大可能的完美度。 例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。
考点:键盘接收、判断字母字符串、大小写转化、获取每个字母出现的次数、字母和数组组合求最大值的算法、map集合存放有关系的数据对
思路:1、键盘接收字符串
         2、读取一行判断是否为字母字符串,如果是者先转化为小写
          3、获取每个字母出现的次数
          4、获取最大值----- 算法的思路(次数出现最多的字母分配最大的整数)
  1. import java.io.*;
  2. import java.util.*;
  3. import java.util.Map.Entry;
  4. public class Test5 {

  5. public static void main(String[] args) {
  6. //键盘录入
  7. String str="";
  8. BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
  9. try {
  10. //读取一行
  11. str=buf.readLine();
  12. } catch (IOException e) {
  13. e.printStackTrace();
  14. }
  15. if(isOk(str)){//调用字母字符串判断方法
  16. getMax(str);
  17. }
  18. else{
  19. System.out.println("请输入字母字符串!!!");
  20. }
  21. }

  22. public static void getMax(String str){
  23. int Max=0;//定义一个最大值来记录获取的最大值
  24. int num=26;//定义x来记录26;
  25. str=str.toLowerCase();//转化为小写
  26. char arr[]=str.toCharArray();//字符串转化为字符数组
  27. Arrays.sort(arr);//排序
  28. Map<Character,Integer> map=new TreeMap<Character,Integer>();//定义个map集合来存字符串
  29. for(int x=0;x<arr.length;x++){//遍历数组,存入字母和字母出现的次数
  30. if(map.containsKey(arr[x])){
  31. int value=map.get(arr[x]);
  32. value++;
  33. map.put(arr[x], value);
  34. }
  35. else{
  36. map.put(arr[x], 1);
  37. }
  38. }
  39. System.out.println("各字母出现的次数"+map);//测试是否获取字母的出现次数
  40. ArrayList<Integer> al=new ArrayList<Integer>();//list集合存放map集合的vale值,
  41. Set<Entry<Character, Integer>> set=map.entrySet();//获取entry对象
  42. Iterator<Entry<Character, Integer>> it=set.iterator();//获取迭代器
  43. while(it.hasNext()){//遍历set集合
  44. Entry<Character, Integer> en =it.next();
  45. al.add(en.getValue());//去除map集合的值添加到list集合中
  46. }
  47. Collections.sort(al,Collections.reverseOrder());//对list集合排序从大到小
  48. System.out.println("次数排序:::"+al);//打印list集合
  49. for(Integer i:al){//遍历集合,计算最大数
  50. Max=Max+i*num;
  51. num--;
  52. }
  53. System.out.println("完美度为:::"+Max);//打印最大数



  54. }
  55. public static boolean isOk(String str){
  56. if(str.matches("[a-zA-Z]+?")){//正则匹配字母字符串
  57. return true;
  58. }
  59. else{
  60. return false;//不满足
  61. }
  62. }

  63. }
复制代码


点评

活动题题目,就暂不在这里打分了。你的附件好像撤销了。 周末我会打分  发表于 2014-11-28 19:55

5 个回复

倒序浏览
想问下你这是用什么软件写的代码,还有代码怎么复制,能有这样的效果?
回复 使用道具 举报
SpiderManZZH 发表于 2014-11-27 23:24
想问下你这是用什么软件写的代码,还有代码怎么复制,能有这样的效果?

用的eclipse写的,代码复制是发帖的时候有个 添加代码选项 (那个<>就是)。方立勋老师的javaWeb视频开头就讲eclipse这个怎么用了。
回复 使用道具 举报
eclipse跟editPlus区别大吗?好用吗?
回复 使用道具 举报
java小兵 发表于 2014-11-28 13:07
eclipse跟editPlus区别大吗?好用吗?

eclipse是个开发工具,可以对代码进行调试、运行等一系列操作,比editPlus大多了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马