从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3„n*n 的数字按照顺时针螺旋的形式填入其中。例如: 输入数字2,则程序输出:
1 2
4 3
输入数字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/2
*/
import java.util.*;
public class Main{
public static void print(int[][] array){
for(int i=0;i<array.length;i++){
for(int j=0;j<array.length;j++){
System.out.printf("%4d", array[i][j]);
}
System.out.println();
}
}
public static void main(String[] args){
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int[][] array=new int[n][n];
int startIndex=0,endIndex=n,e=0,count=1;
while(e<=n/2){
for(int i=startIndex;i<endIndex;i++){
//给该轮的上层赋值,行数由变量e决定,依次为第0,1,2,...,n/2行
array[e][i]=count++;
}
for(int i=startIndex+1;i<endIndex;i++){
//给该轮的右侧赋值,列数由n-1-e决定,依次为第n-1,n-2,n/2列
//同时,注意不要覆盖已经赋值的位置
array[i][n-1-e]=count++;
}
for(int i=endIndex-2;i>=startIndex;i--){
//给该轮的下侧赋值,行数由n-1-e决定,依次为第n-1,n-2,n/2行
array[n-1-e][i]=count++;
}
for(int i=endIndex-2;i>=startIndex+1;i--){
//给该轮的左侧赋值,列数由e决定,依次为第0,1,2,n/2列
array[i][e]=count++;
}
//由于一轮赋值后围一圈,所以,startIndex和endIndex都需要变化
startIndex++;
endIndex--;
//起始的行数e也需要发生变化
e++;
}
print(array);
}
}