磁盤的容量單位常用的有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;
}
}
總結:統一單位的好思路,輔助函數中定位單位的操作蠻好。