1. 程式人生 > >java語言程式設計 第八章(8.35、8.36)

java語言程式設計 第八章(8.35、8.36)

程式小白,希望和大家多交流,共同學習
8.35
(最大塊)給定一個元素為0或者1的方陣,編寫一個程式,找到一個元素都為1的最大的子方陣。程式提示使用者輸入矩陣的行數。然後顯示最大的子方陣的第一個元素,以及該子方陣中的行數。

import java.util.Scanner;

public class MaximumSquare
{
    public static void main(String[] args)
    {
        int[][] matrix = creatMatrix();
        int[] result = findMax(matrix);
        System.out
.println("The maximun square submatrix is at(" + result[1] + ", " + result[2] + ") with size " + result[0]); } public static int[][] creatMatrix() { Scanner input = new Scanner(System.in); System.out.print("Enter the number of rows in the matrix: "); int
number = input.nextInt(); System.out.println("Enter the matrix row by row: "); int[][] matrix = new int[number][number]; for (int row = 0; row < number; row++) { for (int column = 0; column < number; column++) { matrix[row][column] = input.nextInt(); } } return
matrix; } public static int[] findMax(int[][] matrix) { int[] result = new int[3]; result[0] = 0; result[1] = 0; result[2] = 0; for (int row = 0; row < matrix.length - 1; row++) { for (int column = 0; column < matrix[0].length - 1; column++) { int record = findLength(matrix, row, column); if (record > result[0]) { result[0] = record; result[1] = row; result[2] = column; } } } return result; } public static int findLength(int[][] matrix, int row, int column) { //最重要的就是這句判斷,保證每一個元素都要在 matrix 中 if ((matrix[row][column] == 0) || (matrix[row + 1][column + 1] == 0)) { return 0; } int length = 0; boolean succ = false; while (!succ) { if ((row + length >= matrix.length) || (column + length >= matrix.length)) { return length; } for (int r = row; r < row + length; r++) { //System.out.println(row + " " + column + " " + length); if (matrix[r][column + length] != 1) { return length; } } for (int c = column; c < column + length; c++) { if (matrix[row + length][c] != 1) { return length; } } length++; } System.out.println(length); return length; } } }

8.36
(拉丁正方形)拉丁正方形是一個n * n的陣列,有n個不同的拉丁字母填寫,每個拉丁字母恰好只在每行和每列中出現一次。程式設計一個程式,提示使用者輸入數字n以及字元陣列,檢查該輸出陣列是否是一個拉丁正方形。字元是從A開始的前面n個字元。

import java.util.Scanner;

public class MarkovMatrix
{
    public static void main(String[] args)
    {
        double[][] matrix = creatMatrix();
        isMarkovMatrix(matrix);
    }

    public static double[][] creatMatrix()
    {
        Scanner input = new Scanner(System.in);
        double[][] matrix = new double[6][6];
        System.out.println("Enter a 3-by-3 matrix: ");
        for (int row = 0; row < 3; row++)
        {
            for (int column = 0; column < 3; column++)
            {
                matrix[row][column] = input.nextDouble();
            }
        }

        return matrix;
    }

    public static void isMarkovMatrix(double[][] matrix)
    {
        boolean succ = false;
        for (int column = 0; column < 3; column++)
        {
            double sum = 0.0;
            for (int row = 0; row < 3; row++)
            {
                sum += matrix[row][column];
            }

            if (sum == 1.0)
            {
                succ = true;
                break;
            }
        }

        if (succ)
        {
            System.out.println("It is a markov matrix.");
        }
        else
            System.out.println("It is not a markov matrix.");
    }
}