🌈 Scala 实现
题目描述:
-
给定一个仅包含0和1的n*n二维矩阵,请计算二维矩阵的最大值
-
计算规则如下:
-
每行元素按下标顺序组成一个二进制数(下标越大约排在低位),二进制数的值就是该行的值,矩阵各行之和为矩阵的值。
-
允许通过向左或向右整体循环移动每个元素来改变元素在行中的位置。
比如:
[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 ❤️