华为OJ 名字美丽度
这是一道坑爹的题目,为什么这么说,且看我慢慢分析……
题目例如以下:
给出一个名字,该名字有26个字符串组成,定义这个字符串的“美丽度”是其全部字母“美丽度”的总和。
每一个字母都有一个“美丽度”。范围在1到26之间。没有不论什么两个字母拥有同样的“美丽度”。字母忽略大写和小写。
给出多个名字。计算每一个名字最大可能的“美丽度”。
输入:
整数N。后面N个名字,如
2 zhangsan lisi
输出:
每一个名字相应的最大美丽程度
如:192 101
题目分析:
这道题目乍一看,挺厉害的。可是一分析就发现这事实上就是求一个字符串中每一个字符的出现次数,为了获得最大的美丽度那么必须让出现次数最多的字符美丽度为26,依次递减往下。
有了解题思路。直接上代码,代码例如以下,Java实现
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 class Main {public static void main(String[] args){Scanner scanner=new Scanner(System.in);int N=scanner.nextInt();String[] names=new String[N];Main main=new Main();for (int i = 0; i < N; i++) {names[i]=scanner.next();System.out.println(main.beautyfulNames(names[i]));//为何是System.out.println()。后面解释}scanner.close();}public int beautyfulNames(String name){char[] c=name.toCharArray();Map<Character, Integer> map=new HashMap<Character,Integer>();for (int i = 0; i < c.length; i++) {if (map.containsKey(c[i])) {map.put(c[i], map.get(c[i])+1);}else {map.put(c[i], 1);} }List<Map.Entry<Character, Integer>> list=new ArrayList<Map.Entry<Character,Integer>>(map.entrySet());//Collections.sort重载方法来实现排序Collections.sort(list,new Comparator<Map.Entry<Character, Integer>>() {public int compare(Map.Entry<Character, Integer> o1,Map.Entry<Character, Integer> o2){return o2.getValue().compareTo(o1.getValue());//降序排列
// return o1.getValue().compareTo(o2.getValue());//升序排列}});int result=0;for (int i = 0; i < list.size(); i++) {result=result+list.get(i).getValue()*(26-i);}return result;}}
看到我的这段代码。你肯定会说这么输出是不正确的,由于题目给的输出实例中明显是都在一行……可是我告诉你这么是对的,这就是我说这道题坑爹的原因所在。我第一提交的时候用的是System.out.print()。然后直接就提示说“格式错误”,不死心,我又提交第二次。依然“格式错误”,后来我抱着试试看的态度使用System.out.println()又一次提交,居然就对了。!
!!
——这么大一个公司,做事情到了如此不认真的地步,我也真是醉了……
标记为原创的博文均为本人辛苦码字所得,谢绝抄袭。转载请注明出处,新浪微博私信艾特:物联网project_Niegang。
转载于:https://www.cnblogs.com/jhcelue/p/7225589.html
华为OJ 名字美丽度相关推荐
- 华为OJ——名字的漂亮度
题目描述 给出一个名字,该名字有26个字符串组成,定义这个字符串的"漂亮度"是其所有字母"漂亮度"的总和. 每个字母都有一个"漂亮度",范围 ...
- 华为OJ 名字的漂亮度
描述 给出一个名字,该名字有26个字符串组成,定义这个字符串的"漂亮度"是其所有字母"漂亮度"的总和.每个字母都有一个"漂亮度",范围在1到 ...
- 华为初级——名字的漂亮度
值得注意:对于每个名字来说:名字的漂亮度=26*字母个数最多的+25*字母个数其次的+24*字母个数再其次的-- 源程序: #include<iostream> #include<s ...
- 循环相乘取整法C语言,华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)...
题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出乘积,如:151851741 样例输入: 1234567 123 样例输出: 1518 ...
- 【华为OJ】【042-矩阵乘法】
[华为OJ][算法总篇章] [华为OJ][042-矩阵乘法] [工程下载] 题目描述 如果A是个x行y列的矩阵,B是个y行z列的矩阵,把A和B相乘,其结果将是另一个x行z列的矩阵C. 这个矩阵的每个元 ...
- 【华为OJ】【067-求最小公倍数】
[华为OJ][算法总篇章] [华为OJ][067-求最小公倍数] [工程下载] 题目描述 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数. ...
- C语言无符号双字节乘法,华为OJ机试标题:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)...
华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘) 题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出 ...
- 华为OJ(MP3光标移动)
描述: MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲.为了简化处理,假设每屏只能显示4首歌曲,光标初始的位置为第1首歌. 现在要实现通过 ...
- 【华为OJ】【099-MP3光标位置】
[华为OJ][算法总篇章] [华为OJ][099-MP3光标位置] [工程下载] 题目描述 MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲 ...
最新文章
- 2.1:CGPROGRAM
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(输出多个分组)实战
- Python单元测试--使用装饰器实现测试跳过和预期故障
- Android自动化测试之MonkeyRunner录制和回放脚本
- Launcher结构之home screen
- 为解决半导体供应短缺问题,全球半导体厂商迅速增产
- 遍历目录下的所有文件-os.walk
- 年报掘金:机构增仓路线图曝光(2010-03-06转载)
- IDEA + Spring boot devtools 热部署 与 多实例启动
- 欧姆龙CP1H的PLC步进功能图编程实例
- 8uftp怎么下载客户文件,8uftp怎么实现下载客户文件
- Google Play搜不到自己应用
- 性能优化,进无止境---内存篇(下)
- 安卓程序运行显示permission is only granted to system apps的解决方法
- 【深度学习】搭建类似LeNet-5网络识别Fashion-MNIST数据集(衣服,鞋子等)
- 网络文件传输工具,秒杀各种网络文件传送工具的镭速云
- 2-折腾python:继续一些瞎打印的小把戏
- mysql constant number,Mysql报Too many connections,不要乱用ulimit了,看看如何正确修改进程的最大文件数...
- 关于游戏性能优化的一些感想
- 核心频率个加速频率_今年前 9 个月全工序实现负能炼钢,本钢板材炼钢厂绿色清洁生产频率加快...