AcWing 753. Java通俗易懂
原题链接
困难
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n;
while ((n = scanner.nextInt()) != 0) {
int[][] matrix = new int[n][n];
for (int i = 0; 2 * i + 1 <= n; i++) {
fillMatrix(matrix, i + 1, i, n - 1 - i, i, n - 1 - i);
}
display(matrix, n);
System.out.println();
}
}
public static void fillMatrix(int[][] matrix, int num, int startRow, int endRow, int startCol, int endCol) {
//从左往右 一定存在从左往右的情况
for (int i = startCol; i <= endCol; i++) {
matrix[startRow][i] = num;
}
//从上往下 两行才会存在该情况
if (endRow > startRow) {
for (int i = startRow + 1; i <= endRow; i++) {
matrix[i][endCol] = num;
}
}
//从右往左 两行两列存在该情况
if (endRow > startRow && endCol > startCol) {
for (int i = endCol - 1; i >= startRow; i--) {
matrix[endRow][i] = num;
}
}
//从下往上 三行两列存在该情况
if (endRow > startRow + 1 && endCol > startCol) {
for (int i = endRow - 1; i > startRow; i--) {
matrix[i][startCol] = num;
}
}
}
public static void display(int[][] matrix, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}