从键盘输入一个整数( 1~20)
则以该数字为矩阵的大小,把 1,2,3⋯ n*n 的数字按照顺时针螺旋的形式填入其中。例如:
输入数字 2,则程序输出:
1 2
4 3
1 2 3
8 9 4
7 6 5
输入数字 4, 则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
思路:
我们可以把矩阵n*n看成是多个圈,一个圈,一个圈的。从外圈往里圈进行赋值,只要给每个圈的四条边顺时针赋值即可。注意的一点的是,当输入数字n为奇数时,最里面的是一个数字;当输入数字n为偶数时,最里面的是圈。
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); //矩阵大小
int[][] arr = new int[n][n];
int s = 1; //初始值
for(int i = 0; i < n/2; i++){ //第几圈,从外圈到内圈进行 顺时针赋值
for(int j = i; j <= n-i-1; j++){ //第一条边 从左到右赋值
arr[i][j]=s++;
}
for(int k = i+1; k <= n-i-1; k++){ //第二条边 从上往下赋值
arr[k][n-i-1]=s++;
}
for(int l = n-i-2;l>=i;l--){ //第三条边 从右往左赋值
arr[n-i-1][l]=s++;
}
for(int m = n-i-2;m>=i+1;m--){ //第四条边 从下往上
arr[m][i]=s++;
}
}
//如果是奇数,中间有一个数
if(n%2==1){
arr[n/2][n/2]=s;
}
//输出
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.printf("%3d ",arr[i][j]);
}
System.out.println();
}
}
}