欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OJ: 蛇形矩阵 螺旋矩阵

程序员文章站 2022-07-12 09:29:03
...

题目描述

  • 题目说明

    在一个N*N的方阵中,填入1,2,…N共N个数,并要求构成如下的格式:N<=10

    例:
    OJ: 蛇形矩阵 螺旋矩阵

  • 输入描述

    多组数据,每行读入一个N

  • 输出描述

    对应输出N*N的蛇形矩阵,每个数字占3格子,每个蛇形矩阵之间用空行分割

  • 输入样例

    3
    4

  • 输出样例

      7  8  1
      6  9  2
      5  4  3

     10 11 12  1
      9 16 13  2
      8 15 14  3
      7  6  5  4

实现思路

如图,将该螺旋矩阵的每一环分为4个部分进行讨论:
OJ: 蛇形矩阵 螺旋矩阵
从右上部分开始,顺时针对矩阵的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] 数组