N块磁盘容量从小到大稳定排序

磁盘的容量单位有M,G,T这三个等级,他们之间的换算关系为:1T=1024G,1G=1024M
现在给定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;
    }
}



全部评论

相关推荐

不愿透露姓名的神秘牛友
07-23 14:13
这是聊岔撇了吗,相同的话问了两遍
吴offer选手:上下文切换这一块
点赞 评论 收藏
分享
程序员小白条:这比例牛逼,750:1
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务