OJ: 蛇形矩阵 螺旋矩阵
程序员文章站
2022-07-12 09:29:03
...
题目描述
-
题目说明
在一个N*N的方阵中,填入1,2,…N共N个数,并要求构成如下的格式:N<=10
例:
-
输入描述
多组数据,每行读入一个N
-
输出描述
对应输出N*N的蛇形矩阵,每个数字占3格子,每个蛇形矩阵之间用空行分割
-
输入样例
3
4 -
输出样例
7 8 1
6 9 2
5 4 310 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
实现思路
如图,将该螺旋矩阵的每一环分为4个部分进行讨论:
从右上部分开始,顺时针对矩阵的4个部分分别进行赋值操作(需要注意使用for循环进行遍历时,每个部分的行列初始值和遍历方向均不同),最外层的每部分分别赋N-1个值,第二层赋(N-1)-2个值,以此类推,进行N/2轮赋值,此时若N为偶数,赋值完成;若N为奇数,则额外对矩阵正*的元素进行赋值,完成赋值操作。
随后根据需要对矩阵进行遍历输出即可。
实现代码(Java)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
while(sc.hasNextInt()) {
int N = sc.nextInt();
int[][] matrix = new int[N][N];
int current = 1;
for(int lap=0;lap<N/2;lap++) {
for(int i=lap;i<(N-lap-1);i++)
matrix[i][N-lap-1] = current++;
for(int i=N-lap-1;i>lap;i--)
matrix[N-lap-1][i] = current++;
for(int i=N-lap-1;i>lap;i--)
matrix[i][lap] = current++;
for(int i=lap;i<(N-lap-1);i++)
matrix[lap][i] = current++;
}
if(N%2!=0)
matrix[N/2][N/2] = current;
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
int output = matrix[i][j];
if(output/10==0)
System.out.print(" "+output);
else if((output/10)>=1&&(output/10)<10)
System.out.print(" "+output);
else
System.out.print(output);
}
System.out.println();
}
System.out.println();
}
}
}
上一篇: 入门OJ
下一篇: [剑指offer] 数组