以下是使用 Java 实现的代码:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        int[][] matrix = generateMatrix(5, 5, 10);
        printMatrix(matrix);
    }

    public static int[][] generateMatrix(int m, int n, int maxVal) {
        int[][] matrix = new int[m][n];
        Random rand = new Random();

        // 生成随机数字
        int[] nums = new int[maxVal];
        for (int i = 0; i < maxVal; i++) {
            nums[i] = i + 1;
        }
        shuffleArray(nums);

        // 在每行中选择出现次数最多的数字
        int[] maxNums = new int[m];
        for (int i = 0; i < m; i++) {
            int maxCount = 0;
            int maxNum = 0;
            for (int j = 0; j < maxVal; j++) {
                int count = rand.nextInt(4) + 1; // 每个数字的出现次数为1到4之间的随机数
                if (count > maxCount && j + count <= maxVal && isConsecutive(nums, j, count)) {
                    maxCount = count;
                    maxNum = nums[j];
                }
            }
            maxNums[i] = maxNum;
        }

        // 填充矩阵
        for (int i = 0; i < m; i++) {
            int count = 0;
            for (int j = 0; j < n; j++) {
                if (count < maxNums.length && matrix[i][j] == 0) {
                    int num = maxNums[count];
                    int maxCount = Math.min(n - j, 3);
                    for (int k = 0; k < maxCount; k++) {
                        matrix[i][j + k] = num;
                    }
                    count++;
                } else {
                    matrix[i][j] = nums[rand.nextInt(maxVal)];
                }
            }
        }

        return matrix;
    }

    // 判断数组中是否有元素连续出现至少count次
    public static boolean isConsecutive(int[] nums, int start, int count) {
        for (int i = start; i < start + count - 1; i++) {
            if (nums[i] + 1 != nums[i + 1]) {
                return false;
            }
        }
        return true;
    }

    // 随机打乱数组元素的顺序
    public static void shuffleArray(int[] nums) {
        Random rand = new Random();
        for (int i = 0; i < nums.length; i++) {
            int j = rand.nextInt(nums.length - i) + i;
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
    }

    // 输出矩阵
    public static void printMatrix(int[][] matrix) {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }
}

代码中的 generateMatrix 方法接受三个参数:矩阵的行数、列数和最大数字。该方法首先生成一个包含1到最大数字的数组,并随机打乱其中元素的顺序。然后在每行中随机选择一个数字作为出现次数最多的数字,该数字的出现次数为1到4之间的随机数,且保证该数字在每行中至少连续出现三次。接下来填充矩阵,对于每一行,先填充出现次数最多的数字,然后用随机数字填充剩余的空格。最后输出生成的矩阵。

Java 实现二维数组随机生成数字,保证一个数字出现次数最多且连续

原文地址: https://www.cveoy.top/t/topic/oY33 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录