16.磁盤容量排序


磁盤的容量單位常用的有M G T , 他們之間的換算關系為 1T =1024G 1G=1024M
現在給定n塊磁盤的容量,請對他們按從小到大的順序進行穩定排序

例如給定5塊盤的容量
5
1T
20M
3G
10G6T
3M12G9M

排序后的結果為
20M
3G
3M 12G 9M
1T,10G 6T
注意單位可以重復出現

上述3M 12G 9M表示的容量即為 3M 12G 9M 和12M 12G相等


輸入描述、
輸入第一行包含一個整數n, 2<=n<=100 表示磁盤的個數
接下來的n行,每行一個字符串,2<長度<30 ,表示磁盤的容量
由一個或多個格式為MV的子串組成,其中m表示容量大小,v表示容量單位。例如20M 1T, 磁盤容量的范圍1~1024的正整數,單位 M G T

輸出n行,表示n塊磁盤容量排序后的結果。

實例
輸入
3
1G
2G
1024M


輸出
1G
1024M
2G
說明:穩定排序要求相等值保留原來位置

示例2
3
2G4m
3M2G
1T

輸出
3M2G
2G4M
1T

 

查看代碼

import java.util.*;

public class Demo16 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());

        //接收數據
        ArrayList<String> list = new ArrayList<>();
        for(int i = 0; i < n; i++){
            list.add(sc.nextLine());
        }

        list.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return getChange(o1) - getChange(o2);
            }
        });

        for(String s : list){
            System.out.println(s);
        }
    }


    //輔助函數
    private static int getChange(String s){
        String temp = s.toUpperCase();
        String[] split = temp.split("[A-Z]");
        int sum = 0;  //記錄s同一單位后的數值
        int length = 0;  //定位單位位置所用
        
        for(int i = 0; i < split.length; i++){
            int num = Integer.parseInt(split[i]);
            length += split[i].length();
            char c = temp.charAt(length); 
            switch(c){
                case 'M' :
                    sum += num;
                    break;
                case 'G' :
                    sum += num * 1024;
                    break;
                case 'T' :
                    sum += num * 1024 * 1024;
                    break;
            }
            length++;
        }
        return sum;
    }
}

 

總結:統一單位的好思路,輔助函數中定位單位的操作蠻好。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM