java語言程式設計 第八章(8.35、8.36)
阿新 • • 發佈:2019-02-06
程式小白,希望和大家多交流,共同學習
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.");
}
}