1、给定一个N*M的矩阵,3<=N<=100,3<=M<=20,值为0,1随机分布
2、给定一个K,1<=K<=M
3、翻转矩阵的列K次,即某一列的所有值0转1,1转0,必须用满K次
4、如何翻转可以得到矩阵中行全为1的最大行数,输出这个最大值。
import java.util.Random;
public class MatrixFlip {
public static void main(String[] args) {
int N = 5; // 你的N值,可以根据需要修改
int M = 5; // 你的M值,可以根据需要修改
int K = 2; // 你的K值,可以根据需要修改
int[][] matrix = generateRandomMatrix(N, M);
System.out.println("原始矩阵:");
printMatrix(matrix);
flipMatrixColumns(matrix, K);
System.out.println("\n翻转后的矩阵:");
printMatrix(matrix);
int maxOnes = findMaxOnesRow(matrix);
System.out.println("\n矩阵中行全为1的最大行数:" + maxOnes);
}
private static int[][] generateRandomMatrix(int N, int M) {
int[][] matrix = new int[N][M];
Random random = new Random();
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
matrix[i][j] = random.nextInt(2);
}
}
return matrix;
}
private static void flipMatrixColumns(int[][] matrix, int K) {
int N = matrix.length;
int M = matrix[0].length;
for (int k = 0; k < K; k++) {
int col = k % M;
for (int i = 0; i < N; i++) {
matrix[i][col] = 1 - matrix[i][col];
}
}
}
private static int findMaxOnesRow(int[][] matrix) {
int maxOnes = 0;
for (int[] row : matrix) {
int onesCount = 0;
for (int value : row) {
if (value == 1) {
onesCount++;
}
}
maxOnes = Math.max(maxOnes, onesCount);
}
return maxOnes;
}
private static void printMatrix(int[][] matrix) {
for (int[] row : matrix) {
for (int value : row) {
System.out.print(value + " ");
}
System.out.println();
}
}
}