螺旋矩阵

本文介绍了一种使用Java实现螺旋矩阵的方法。通过输入整数N,程序可以生成并打印出N×N大小的螺旋矩阵。文章提供了完整的源代码,并详细解释了螺旋矩阵的构造逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。
例如这张图片展示的是一个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();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值