螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。
例如这张图片展示的是一个4*4 螺旋矩阵:
基本思路:螺旋矩阵的打印首先要对n*n的数组进行赋值,根据规律可以看出,每一层都是按照右->下->左->上的顺序进行递增,因此,只要找出每一层的第一个数即可,第一个数值为上一层的第一个数+4*n-4,循环时n每次减2
/**
* 螺旋矩阵
* 用java实现的螺旋矩阵,当输入N之后,会自动打印出N * N螺旋矩阵
*/
public class ScrewMatrix {
public static void main(String[] args) {
for (;;) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
CreateScrewMatrix(n);
}
}
public static void CreateScrewMatrix(int n) {
int tempN = n;
int[][] a = new int[n][n];
int i, j, num = 0, nn = 1;
while (n > 0) {
a[num][num] = nn;
if (n > 1) {
//每次的循环由mun和n控制 mun代表第几个矩阵 n代表每一次矩阵的长度
for (i = num, j = num + 1; j < num + n; j++)//上边横着
{
a[i][j] = a[num][num] + j - num;
}
for (j = num + n - 1, i = num + 1; i < num + n; i++)//右边竖着
{
a[i][j] = a[i - 1][j] + 1;
}
for (i = num + n - 1, j = n + num - 2; j >= num; j--)//下面横着
{
a[i][j] = a[i][j + 1] + 1;
}
for (j = num, i = num + n - 2; i > num; i--)//左面竖着
{
a[i][j] = a[i + 1][j] + 1;
}
} else {
break;
}
//每个矩形的第一个起始值
nn += 4 * n - 4;
//循环一遍,矩形的内圈减少两行
n = n - 2;
num++;
}
//打印二维数组
for (i = 0; i < tempN; i++) {
for (j = 0; j < tempN; j++) {
System.out.printf("%4d", a[i][j]);
}
System.out.println();
}
}
}