N块磁盘容量从小到大稳定排序
磁盘的容量单位有M,G,T这三个等级,他们之间的换算关系为:1T=1024G,1G=1024M
现在给定N块磁盘的容量,请对他们按从小到大的顺序进行稳定排序
现在给定N块磁盘的容量,请对他们按从小到大的顺序进行稳定排序
例如给定5块盘容量:1T,20M,3G,10G6T,3M12G9M,12M12G 排序后的结果为: 20M,3G,3M12G9M,12M12G,1T,10G6T 注意单位可以重复出现 上述3M12G9M为 3M+12G+9M和 12M12G相等 输入描述: 输入第一行包含一个整数N,2<=N<=100 ,表示磁盘的个数,接下来的N行每行一个字符串长度(2<l<30)表示磁盘的容量 输出描述: 输出N行,表示N块磁盘容量排序后的结果 示例: 输入 6 1T 20M 3G 10G6T 12M12G 3M12G9M 输出 20M 3G 12M12G 3M12G9M 1T 10G6T
import java.util.*; public class Main { public static void main(String...args){ Scanner sc = new Scanner(System.in); int num = sc.nextInt(); //使用list集合存储原始数据 ArrayList<String> list = new ArrayList<>(); for(int i = 0; i < num; i ++){ list.add(i,sc.next()); } //将list中所有的value拿出来 String[] values = list.toArray(new String[0]); int[] vals = new int[values.length]; for(int i =0; i < values.length; i ++){ //获取字符串value中的所有数值的积与和 vals[i] = getValue(values[i]); } //将所有vals按从小到大排序,顺便将相同下标的list集合排序 for (int i = 0; i < vals.length; i ++){ for(int j = i + 1; j < vals.length; j ++){ if(vals[j] < vals[i]){ int temp1 = vals[i]; vals[i] = vals[j]; vals[j] = temp1; String temp2 = list.get(i); list.set(i, list.get(j)); list.set(j, temp2); } } } //输出排序后的values System.out.println("排序输出结果:"); for(int i = 0; i < list.size(); i ++){ System.out.println(list.get(i)); } } public static int getValue(String value){ //将字符串中的T、G、M 全部转换为以“1M”为单位的乘积表达式 if(value.contains("T")){ value = value.replaceAll("T", "*1024*1024*1+"); } if (value.contains("G")){ value = value.replaceAll("G", "*1024*1+"); } if(value.contains("M")){ value = value.replaceAll("M", "*1+"); } value = value.substring(0,value.length() - 1); //获取所有数值乘积和 return getResult(value); } public static int getResult(String str){ String[] split = str.split("[+]"); int sum = 0; for (String value : split) { String[] split1 = value.split("[*]"); int counter = 1; for (String s : split1) { int i1 = Integer.parseInt(s); counter = counter * i1; } sum += counter; } return sum; } }