华为OD机试之矩阵最大值(Java源码)

矩阵最大值

题目描述

给定一个仅包含0和1的N*N二维矩阵,请计算二维矩阵的最大值,计算规则如下:
1.每行元素按下标顺序组成一个二进制数(下标越大越排在低位),二进制数的值就是该行的值。矩阵各行值之和为矩阵的值。
2.允许通过向左或向右整体循环移动每行元素来改变各元素在行中的位置。
比如:
[1,0,1,1,1]向右整体循环移动2位变为[1,1,1,0,1],二进制数为11101,值为29。
[1,0,1,1,1]向左整体循环移动2位变为[1,1,1,1,0],二进制数为11110,值为30。

输入描述

1、输入的第一行为正整数,记录了N的大小,0 < N <= 20。
2、输入的第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 第一行向右整体循环移动1位,得到本行的最大值[1,1,0,0,0],二进制值为11000,十进制值为24。
第二行向右整体循环移动2位,得到本行的最大值[1,1,0,0,0],二进制值为11000,十进制值为24。
第三行向左整体循环移动1位,得到本行的最大值[1,0,1,0,0],二进制值为10100,十进制值为20。
第四行向右整体循环移动2位,得到本行的最大值[1,1,1,0,0],二进制值为11100,十进制值为28。
第五行向右整体循环移动1位,得到本行的最大值[1,1,0,1,0],二进制值为11010,十进制值为26。
因此,矩阵的最大值为122。

源码和解析
解析:

对每行的数据进行n次右移,就可以得到最大的可能。求出每行的最大值即可

示例代码:文章来源地址https://uudwc.com/A/Zm9ZR

public class T8 {
	public static void main(String[] args) {
		int number = 5;
		int[][] numArr = { { 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 } };
		// number = 3;
		// int[][] numArr ={{1,0,1},{0,1,0},{0,0,1}};
		int sum = 0;// 最后的和
		for (int[] arr : numArr) {
			int[] tmpArr = arr;
			int max = 0;
			for (int i = 0; i < arr.length; i++) {
				tmpArr = toRight(tmpArr, number);
				String binStr = "";
				for (int j = 0; j < tmpArr.length; j++) {
					// System.out.print(tmpArr[j] + ",");
					binStr += tmpArr[j];
				}
				int num = Integer.parseUnsignedInt(binStr, 2);
				if (max < num) {
					max = num;
				}
				System.out.println("单行最值:" + max);
			}
			sum += max;// 每行的最大值相加
			System.out.println("_________");
		}
		System.out.println("矩阵的最大值为:" + sum);
	}

	public static int[] toRight(int[] arr, int n) {
		// 右移一位
		int tempArr[] = arr.clone();
		for (int i = 1; i < arr.length - 1; i++) {
			tempArr[i] = arr[i - 1];
		}
		tempArr[0] = arr[arr.length - 1];
		tempArr[arr.length - 1] = arr[arr.length - 2];
		return tempArr;
	}
}
阅读剩余 37%

原文地址:https://blog.csdn.net/qq_33183456/article/details/130784937

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年07月26日 19:48
【MATLAB绘图】
下一篇 2023年07月26日 19:49