黑马程序员技术交流社区
标题:
遇困----------求神助功
[打印本页]
作者:
naceyeve
时间:
2015-11-24 01:00
标题:
遇困----------求神助功
从键盘接受一个字符串,每个字母可自由匹配1-26值,求这个字符串所能达到的最大数(最完美度)
这是个编程题目,对这道题目的解析出现障碍了,以下是某人提供的答案,如果每个字母都匹配26,再相乘相加,完全没有必要排序,
只要得出字符串长度,长度乘以26就是最大值了。
哪位大神能做出来吗?卡壳了,求神助功。。。。。。
public class Demo33 {
public static void main(String[] args) {
MyScanner();
}
public static void MyScanner() { //设置从键盘录入.
Scanner s = new Scanner(System.in);
while(true)
{
String str = s.nextLine();
if(str.equals("over"))
{
System.out.println("输入结束");
break;
}
else
{
char[] ch = str.toCharArray();
ListArray(ch); //获取到该字符串的字符数组,
}
}
}
public static void ListArray(char[] ch) { //遍历该字符数组,将字符和对应出现次数存入map集合.
Map<Character,Integer> ma = new HashMap<Character,Integer>();
for(int x = 0; x < ch.length ; x ++)
{
int n = 0;
for(int y = 0; y < ch.length; y ++)
{
if(ch[x] == ch[y])
{
n ++;
}
}
if(ma.containsKey(ch[x]))
{
continue;
}else
{
ma.put(ch[x], n );
}
}
ListMap(ma); //将map作为参数传递.
}
public static void ListMap(Map<Character, Integer> ma) { //遍历map集合,并获取value值.
Set<Entry<Character,Integer>> se = new HashSet<Entry<Character,Integer>>();
int[] in = new int[ma.size()]; //创建一个和map元素数相同的数组.
se = ma.entrySet();
Iterator<Entry<Character,Integer>> it = se.iterator();
int n = 0;
while(it.hasNext())
{
Entry en = it.next();
in[n] = (Integer) en.getValue(); //将value值存入int数组.
n ++;
}
Arrays.sort(in); //排序数组.
int num = 0;
System.out.println(Arrays.toString(in));
for(int x = in.length -1, y = 26; x >= 0; x --, y --) //倒着赋值.
{
num += in[x]* y; //累加.
}
System.out.println(num); //将结果打印.
}
}
复制代码
作者:
naceyeve
时间:
2015-11-24 01:12
如果看成每个字母与数值是一一对应的关系,用MAP来做,应该可以~
作者:
woaikk991100
时间:
2016-5-26 20:35
题目本身就有问题
作者:
18972877005
时间:
2016-5-26 20:48
我也不会做啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2