OD华为机试 15

磁盘容量排序

描述

磁盘的容量单位常用的有M,G,T这三个等级,它们之间的换算关系为1T = 1024G,1G = 1024M,
现在给定n块磁盘的容量,请对它们按从小到大的顺序进行稳定排序,
例如给定5块盘的容量,1T,20M,3G,10G,6T,3M12G9M排序后的结果为20M,3G,3M12G9M,1T,10G6T。
注意:单位可以重复出现,上述3M12G9M表示的容量即为3M+12G+9M,和12M12G相等。

示例 1:
输入

3
1G
2G
1024M

输出

1G
1024M
2G

说明
1G和1024M容量相等,稳定排序要求保留它们原来的相对位置,故1G在1024M之前。

示例 2:
输入

3
2G4M
3M2G
1T

输出

3M2G
2G4M
1T

说明
1T的容量大于2G4M,2G4M的容量大于3M2G

法一

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {int num = Integer.parseInt(sc.nextLine());List<String> list = new ArrayList<>();//将比较的字符储存到list。然后重写list的排序for (int i = 0 ; i < num ; i++) {list.add(sc.nextLine());}list.sort(new Comparator<String>() {@Overridepublic int compare(String str1, String str2) {return count(str1) - count(str2);}});for (String ss : list) {System.out.println(ss);}}}public static int count(String str) {int sum = 0;String[] strs = str.toUpperCase().split("[A-Z]");int length = 0;//储存每个字符中字母所在的位置for (int i = 0 ; i < strs.length ; i++) {length += strs[i].length();char c = str.charAt(length);int num = Integer.parseInt(strs[i]);switch (c) {case 'M':sum += num ;break;case 'G' :sum += num * 1024;break;case 'T' :sum += num * 1024 * 1024;break;}length++;}return sum;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部