HUAWEI 机试题:磁盘容量排序

🌈 Scala 实现

题目描述:

    磁盘的容量单位有M,G,T这三个等级 他们之间的换算关系为 1T=1024G 1G=1024M 现在给定N块磁盘的容量,请对他们按从小到大的顺序进行稳定排序 例如给定5块盘容量,1T,20M,3G,10G6T,3M12G9M,排序后的结果为20M,3G,3M12G9M,1T,10G6T 注意单位可以重复出现,上述3M12G9M为 3M+12G+9M和12M12G相等

输入描述:

    输入第一行包含一个整数N,2<=N<=100,表示磁盘的个数 接下来的N行每行一个字符串 长度 (2<l<30),表示磁盘的容量 有一个或多个格式为mv的子串组成,其中m表示容量大小v表示容量单位 磁盘容量m的范围 1~1024正整数容量单位v的范围包含题目中提到的M,G,T

输出描述:

    输出N行 表示N块磁盘容量排序后的结果
示例 输入: 3 1G 2G 1024M 输出: 1G 1024M 2G 说明: 1G和1024M容量相等,稳定排序要求保留他们原来的相对位置,故1G在1024M前 输入: 3 2G4M 3M2G 1T 输出: 3M2G 2G4M 1T 说明: 1T大于2G4M大于3M2G

代码:

def main(args: Array[String]): Unit = {
          
   

    // 获取输入
    val N = StdIn.readLine().toInt
    // 获取每一次磁盘容量
    var buffer = new ListBuffer[String]
    for (i <- 1 to N) {
          
   
        buffer += StdIn.readLine()
    }

    buffer.sortWith((o1, o2) => {
          
   
        val o1F = formatted(o1)
        val o2F = formatted(o2)
        if (o1F != o2F) o1F.compareTo(o2F) < 0 else o1F.compareTo(o2F) > 0
    }).foreach(println)

}

// 实现单位换算,同一换算为 M
def formatted(str: String): Int = {
          
   
    var sum = 0
    var tmpIndex = -1
    for (i <- 0 to str.length - 1) {
          
   
        if (str(i) == M) {
          
   
            sum += Integer.parseInt(str.substring(tmpIndex + 1, i))
            tmpIndex = i
        } else if (str(i) == G) {
          
   
            sum += Integer.parseInt(str.substring(tmpIndex + 1, i)) * 1024
            tmpIndex = i
        } else if (str(i) == T) {
          
   
            sum += Integer.parseInt(str.substring(tmpIndex + 1, i)) * 1024 * 1024
            tmpIndex = i
        }
    }
    sum
}

❤️ END ❤️ ❤️ END ❤️
经验分享 程序员 微信小程序 职场和发展