华为OD机考-数字螺旋矩阵(JAVA 2025B卷)
public class RotateMatrix {public static void main(String[] args) {// 顺时针螺旋矩阵printMatrixV1();// 逆时针螺旋矩阵//printMatrixV2();}private static void printMatrixV2() {Scanner scan = new Scanner(System.in);while(scan.hasNextLine()){String[] line = scan.nextLine().split(" ");int number = Integer.parseInt(line[0]);int row = Integer.parseInt(line[1]);int column = (number + row -1)/row;//向上取整String[][] matrix = new String[row][column];int k = 0;int left = 0,right = column - 1,top = 0,bottom=row-1;while(left <= right && top <= bottom){// 从上到下for(int i=top;i<=bottom;i++){matrix[i][left] = ++k>number?"*":""+k;}left++;// 从左到右for(int i=left;i<=right;i++){matrix[bottom][i] = ++k>number?"*":""+k;}bottom--;// 从下到上if(left<=right){for(int i=bottom;i>=top;i--){matrix[i][right] = ++k>number?"*":""+k;}right--;}// 从右到左if(top<=bottom){for(int i=right;i>=left;i--){matrix[top][i] = ++k>number?"*":""+k;}top++;}}for(int i=0;i<row;i++){for(int j=0;j<column;j++){System.out.print(matrix[i][j]+" ");}System.out.println();}}}private static void printMatrixV1() {Scanner scan = new Scanner(System.in);while(scan.hasNextLine()){String[] line = scan.nextLine().split(" ");int number = Integer.parseInt(line[0]);int row = Integer.parseInt(line[1]);int column = (number + row -1)/row;//向上取整String[][] matrix = new String[row][column];int k = 0;int left = 0,right = column - 1,top = 0,bottom=row-1;while(left <= right && top <= bottom){// 从左到右for(int i = left; i<=right; i++){matrix[top][i] = ++k>number?"*":""+k;}top++;// 从上到下for(int i=top;i<=bottom;i++){matrix[i][right]= ++k>number?"*":""+k;}right--;// 从右到左if(top<=bottom){//防止重复赋值for(int i=right;i>=left;i--){matrix[bottom][i]=++k>number?"*":""+k;}bottom--;}// 从下到上if(left<=right){//防止重复赋值for(int i=bottom;i>=top;i--){matrix[i][left]=++k>number?"*":""+k;}left++;}}for(int i=0;i<row;i++){for(int j=0;j<column;j++){System.out.print(matrix[i][j]+" ");}System.out.println();}}}}