HUAWEI 机试题:矩阵的最大值

🌈 Scala 实现

题目描述:

  • 给定一个仅包含0和1的n*n二维矩阵,请计算二维矩阵的最大值

  • 计算规则如下:

    1. 每行元素按下标顺序组成一个二进制数(下标越大约排在低位),二进制数的值就是该行的值,矩阵各行之和为矩阵的值。

    2. 允许通过向左或向右整体循环移动每个元素来改变元素在行中的位置。

      比如:

      [1,0,1,1,1] 向右整体循环移动两位 [1,1,1,0,1],二进制数为11101 值为29
      [1,0,1,1,1] 向左整体循环移动两位 [1,1,1,1,0],二进制数为11110 值为30

输入描述:

  • 数据的第一行为正整数,记录了N的大小,0<N<=20
  • 输入的第2到n+1行为二维矩阵信息
  • 行内元素边角逗号分割

输出描述:

  • 矩阵的最大值

示例

输入:

  • 5
  • 1,0,0,0,1
  • 0,0,0,1,1
  • 0,1,0,1,0
  • 1,0,0,1,1
  • 1,0,1,0,1

输出:

  • 122

说明:

  • 第一行向右整体循环移动一位,得到最大值 11000为24,依次循环,得到最大值122。

代码:

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

    val n = StdIn.readLine().toInt // 获取输入
    var res = 0 // 记录结果

    // 获取每行并处理
    for (i <- 1 to n) {
        val numlist = new util.LinkedList[Integer]()
        StdIn.readLine().split(",").toList.foreach(elem => numlist.add(elem.toInt)) // 循环获取输入的每一行

        var max = Int.MinValue // 记录最大值
        // 获取当前行的最大值
        for (j <- 1 to n) {

            numlist.addLast(numlist.remove(0)) // 移动元素位置
            val str = numlist.toString().replaceAll("\\W+", "")
            val num = Integer.parseInt(str, 2) // 将二进制数转为 int
            if (num > max) max = num // 替换最大值
        }

        res += max // 更新结果
    }

    print(res) // 输出最大值
}

 


❤️ END ❤️
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JOEL-T99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值