OD 机试 磁盘容量

 1 import java.util.*;
 2 
 3 // 注意类名必须为 Main, 不要有任何 package xxx 信息
 4 public class Main {
 5     public static void main(String[] args) {
 6         Scanner in = new Scanner(System.in);
 7         // 注意 hasNext 和 hasNextLine 的区别
 8         // M G T
 9         // 稳定排序 升序
10 /**
11  * 3
12  * 2G4M
13  * 3M2G
14  * 1T
15  */
16  // 磁盘容量比较 考完才想起来该这么做
17         while (in.hasNext()) { // 注意 while 处理多个 case
18             int num = in.nextInt();
19             String[] input = new String[num];
20             HashMap<Integer, String> kvMap = new HashMap<>();
21             for (int i = 0;i < num; i++) {
22                 input[i] = in.next();
23                 String str = input[i];
24                 Integer outNumber = outNumber(str);
25                 kvMap.put(outNumber, kvMap.getOrDefault(outNumber, "") + ";" + str);
26             }
27             // 库函数 解析处理
28             List<Map.Entry<Integer, String>> list = new ArrayList<Map.Entry<Integer, String>>(kvMap.entrySet());
29             // 集合比较
30             Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
31                 // 比较
32                 @Override
33                 public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
34                     if (o1.getKey() < o2.getKey()) {
35                         return -1;
36                     }
37                     return 0;
38                 }
39             });
40             // 排序完成 对应输出
41             for (Map.Entry<Integer, String> map:list) {
42                 // 输出原输入
43                 String[] strings = map.getValue().split(";");
44                 for (int i = 0; i < strings.length; i++) {
45                     if (strings[i] != "") {
46                         System.out.println(strings[i]);
47                     }
48                 }
49             }
50         }
51     }
52 
53     /**
54      * 解析容量
55      * @param str 输入字符串
56      * @return M对应的容量
57      */
58     private static int outNumber(String str) {
59         // 按照 TGM截断
60         String[] str1 = str.split("T|G|M");
61 //        System.out.println(Arrays.toString(str1));
62         String[] str2 = str.split("[0-9]+");
63 //        System.out.println(Arrays.toString(str2));
64         int sum = 0;
65         for (int i = 0; i < str1.length; i++) {
66             if ("T".equals(str2[i+1])) {
67                 sum = sum + Integer.parseInt(str1[i]) * 1024 * 1024;
68             }
69             if ("G".equals(str2[i+1])) {
70                 sum = sum + Integer.parseInt(str1[i]) * 1024;
71             }
72             if ("M".equals(str2[i+1])) {
73                 sum = sum + Integer.parseInt(str1[i]);
74             }
75         }
76         return sum;
77     }
78 }

 

posted @ 2022-05-23 07:05  戒吧老哥助我一臂之力  阅读(47)  评论(0编辑  收藏  举报
跟随粒子特效