资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
给定一个数字n,要求输出规律如下的n阶矩阵.
当n=3
1 2 3
8 9 4
7 6 5
即从外到内回旋填1~n^2数
输入格式
给定一个正整数n(1<=n<=500)
输出格式
总共n行,每行n个正整数,表示要求的n阶矩阵.相邻两个数字之间有一个空格.
样例输入
4
样例输出
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
import java.util.Scanner;
public class Main {
static int row_l;// 行开始
static int column_l;// 列开始
static int row_r;// 行结束
static int column_r;// 列结束
static int index = 1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
row_l = 0;// 行开始
column_l = 0;// 列开始
row_r = n - 1;// 行结束
column_r = n - 1;// 列结束
int[][] arr = new int[n][n];
recusion(arr);
// arr[row_l][column_l] = index;
for (int[] tmp : arr) {
for (int i : tmp) {
System.out.print(i + " ");
}
System.out.println();
}
}
public static void recusion(int[][] arr) {
while (row_l <= row_r && column_l <= column_r) {
for (int i = column_l; i <= column_r; i++) {
arr[row_l][i] = index++;
}
row_l++;
for (int i = row_l; i <= row_r; i++) {
arr[i][column_r] = index++;
}
column_r--;
for (int i = column_r; i >= column_l; i--) {
arr[row_r][i] = index++;
}
row_r--;
for (int i = row_r; i >= row_l; i--) {
arr[i][column_l] = index++;
}
column_l++;
}
}
}