螺旋方阵(列举法,分治法,java版,逆时针)

中M2019秋C入门和进阶练习集 7-90 螺旋方阵 7-90 螺旋方阵 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 ... 阅读详情

目录

螺旋方阵介绍

1.适合基础薄弱同学的 列举法

2.螺旋方阵代码


螺旋方阵介绍

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。这里,我给大家写逆时针的 例如下图:

1.适合基础薄弱同学的 列举法

分析:

我们令行数为i  列数为j  从0开始计数   即0表示第一行
 观察可知
 1  12  11  10  二维数组    列不变       行数i递增
 2  13  16  9   二维数组    列数j递增    行数变化
 3  14  16  8   二维数组    列不变      行数i递减
 4  5   6   7   二维数组    列不j递减    行数变化

 并且:
 存在2个螺旋
 1到12
 以及 13到16
 我们发现 1和13都在对角线位置
 故此 ,每个螺旋的起始位置在对角线上
 而 对角线上的数 行列索引相同


public class lianxi {
    public static void main(String[] args) {
        //先定义一个二维数组,这里先用4*4的举例
        int[][] arr = new int[4][4];
        Spiral(arr);
    }

    public static void Spiral(int[][] arr) {
        /**我们令行数为i  列数为j  从0开始计数   即0表示第一行
         * 观察可知
         * 1  12  11  10 二维数组    列不变       行数i递增
         * 2  13  16  9二维数组    列数j递增    行数变化
         * 3  14  15  8 二维数组    列不变      行数i递减
         * 4  5   6   7 二维数组    列不j递减    行数变化
         *
         * 并且:
         * 存在2个螺旋
         * 1到12
         * 以及 13到16
         * 我们发现 1和13都在对角线位置
         * 故此 ,每个螺旋的起始位置在对角线上
         * 而 对角线上的数 行列索引相同
         */
        int num = 1;
        for (int j = 0; j < 1; j++) {
            for (int i = 0; i < 3; i++) {
                arr[i][j] = num;
                num++;
            }

        }
        /**
         * 1	0	0	0
         * 2	0	0	0
         * 3	0	0	0
         * 0	0	0	0
         */





        for (int i = 3; i < 4; i++) {
            for (int j = 0; j < 3; j++) {
                arr[i][j] = num;
                num++;
            }

        }
        /**
         * 1	0	0	0
         * 2	0	0	0
         * 3	0	0	0
         * 4	5	6	0
         */


        for (int j = 3; j < 4; j++) {
            for (int i = 3; i >0; i--) {
                arr[i][j] = num;
                num++;
            }

        }
        /**
         * 1	0	0	0
         * 2	0	0	9
         * 3	0	0	8
         * 4	5	6	7
         */


        for (int i = 0; i < 1; i++) {
            for (int j = 3; j > 0; j--) {
                arr[i][j] = num;
                num++;
            }

        }
        /**
         * 1	12	11	10
         * 2	0	0	9
         * 3	0	0	8
         * 4	5	6	7
         */




        for (int j = 1; j < 2; j++) {
            for (int i = 1; i < 3; i++) {
                arr[i][j] = num;
                num++;
            }

        }
        /**
         * 1	12	11	10
         * 2	13	0	9
         * 3	14	0	8
         * 4	5	6	7
         */


        for (int j = 2; j < 3; j++) {
            for (int i = 2; i > 0; i--) {
                arr[i][j] = num;
                num++;
            }

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







        for (int[] row : arr) {
            int cnt=0;
            for (int data : row) {
                cnt++;

                System.out.printf("%d\t", data);
                if (cnt==4){
                    System.out.println();
                }


            }
        }

    }
}

结果:

2.螺旋方阵代码

分析:

以6*6二维数组举例

我们令行数为i  列数为j  从0开始计数   即0表示第一行

1    20    19    18    17    16    
2    21    32    31    30    15    
3    22    33    36    29    14    
4    23    34    35    28    13    
5    24    25    26    27    12    
6     7     8     9    10    11    

我们把每圈圈分成:四个循环,就例如绿框有4个。

第一圈:4个绿框, 从arr[0][0]开始

第二圈:4个蓝框, 从arr[1][1]开始

第三圈:4个黄框, 从arr[2][2]开始

再细看第一个圈

第一个绿框:  列不变 行数i递增    arr[0][0]→arr[4][0]

第二个绿框:  列数j递增 行数变化  arr[5][0]→arr[5][4]

第三个绿框:  列不变 行数i递减    arr[5][5]→arr[1][5]

第四个绿框:  列不j递减 行数变化     arr[0][5]→arr[0][1]

后面的你自己分析

代码:

import java.util.Random;

public class spiral {
    public static void main(String[] args) {

        Random random = new Random();
        //产生一个1-30的随机数
        int n=random.nextInt(30)+1;
        //产生一个1*1至30*30的随机二维数组
        int[][] arr = new int[n][n];

        Spiral(arr);
    }
       public static void Spiral(int[][] arr) {

        int num = 1;//num 表示螺旋里面的数字
        int cnt=0; //cnt 用来记录 下面while循环执行的次数.

        while(true){

          //特殊情况,也就是 当随机数n=1时
            if (arr.length==1){
                arr[0][0]=num;
                break;
            }


            /**我们令行数为i  列数为j  从0开始计数   即0表示第一行
             * 第一个循环表示   二维数组    列不变       行数i递增
             * 第二个循环表示   二维数组    列数j递增    行数变化
             * 第三个循环表示    二维数组    列不变      行数i递减
             * 第四个循环表示   二维数组    列不j递减    行数变化
             */



            //第一个循环表示   二维数组    列不变       行数i递增
          for (int j = cnt; j < 1+cnt; j++) {
            for (int i = cnt; i < arr.length-1-cnt; i++) {
                arr[i][j] = num;
                num++;
            }

        }


          //第二个循环表示   二维数组    列数j递增    行数变化
        for (int i = arr.length-1-cnt; i < arr.length-cnt; i++) {
            for (int j = cnt; j < arr.length-1-cnt; j++) {
                arr[i][j] = num;
                num++;
            }

        }

        //第三个循环表示    二维数组    列不变      行数i递减
        for (int j = arr.length-1-cnt; j < arr.length-cnt; j++) {
            for (int i = arr.length-1-cnt; i >cnt; i--) {
                arr[i][j] = num;
                num++;
            }

        }
        //第四个循环表示   二维数组    列不j递减    行数变化
        for (int i = cnt; i < 1+cnt; i++) {
            for (int j = arr.length-1-cnt; j > cnt; j--) {
                arr[i][j] = num;
                num++;
            }

        }

        //已执行完一圈 cnt++
        cnt++;


        //螺旋已到达矩阵的最中间,可以结束循环
        if (cnt== arr.length/2){


            //当二维数组是奇数矩阵时,最中间会空出一个数
            if (arr.length%2==1){
                arr[arr.length/2][arr.length/2]=num;
            }


            break;
        }
        }



        //遍历二维数组
        for (int[] row : arr) {
            cnt=0;
            for (int data : row) {
                cnt++;

                System.out.printf("%d\t", data);
                //当输出的数字等于数组长度时,换行
                if (cnt==arr.length){
                    System.out.println();
                }


            }
        }


    }
}

结果:

因为我们代码中设置了产生随机二维数组,故此螺旋的矩阵大小也是随机的

经典题目螺旋方阵的详解 7-102 螺旋方阵 (20分) 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 #include& 阅读详情

相关推荐

PTA 蛇形矩阵(螺旋方阵)

PTA 蛇形矩阵(螺旋方阵) 螺旋方阵 (20 分) 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 思路

Potestatem的博客 3690

【螺旋方阵】

螺旋方阵,西电期末

weixin_64766128的博客 3501

保姆级教程:在mmdetection中手动计算并可视化P、R、F1值(附完整代码)

本文提供了一份详细的mmdetection教程,指导开发者如何手动计算并可视化精确率(P)、召回率(R)和F1值。通过完整的代码示例和清晰的步骤说明,帮助用户深入理解目标检测模型的性能评估方法,特别适合需要精细分析模型表现的计算机视觉研究人员和工程师。

weixin_29038303的博客 399

7-32 螺旋方阵 (20分)

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7...

Rita的博客 2893

GXHT40温湿度传感器:I2C通信与CRC校验实战解析

本文详细解析GXHT40温湿度传感器的I2C通信协议与CRC校验机制,涵盖硬件连接、时序控制、数据读取及加热功能应用。通过实战案例分享优化技巧与异常处理,帮助开发者提升嵌入式系统中传感器数据的准确性与可靠性。

rgv234567的博客 241

时空数据建模的跨节点联邦图神经网络:KDD21 Cross-Node Federated Graph Neural Network for Spatio-Temporal Data Modeling

前言 联邦学习(FL)虽然已经被广泛研究,但是对复杂的时空依赖关系进行建模以提高预测能力仍然是一个开放的问题。此外目前最优的时空预测模型假定对数据的访问不受限制,忽略了对数据共享的限制。基于此,本文提了一个基于图联邦学习的时空数据模型 Cross-Node Federated Graph Neural Network (CNFGNN),该模型在跨节点联邦学习的约束下,使用基于图神经网络(GNN)的架构对底层图结构进行编码,属于结构化联邦的一种,每个本地模型利用私有数据进行学习,并保持分散性。CNFGNN

qq_56027260的博客 1810

【PTA】7-78 螺旋方阵

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。注意:本题通过控制行、列变量i和j来转圈填充数组(在每一圈中k、l都为限制i、j移动的边界下标)输出N×N的螺旋方阵。每行N个数字,每个数字占3位。输入在一行中给出一个正整数N(

m0_74002634的博客 2355

4.UE数字人工程运行逻辑及程序逻辑

UE数字人工程运行逻辑及程序逻辑

6086

实验7.2 二维数组 7-8 螺旋方阵

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: /* 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 */ #include<stdio

世界在我口袋的博客 2216

手把手拆解:储能电站如何实现‘孤岛运行’与‘黑启动’?从SVPWM控制到无缝并网

本文深入解析储能电站的孤岛运行与黑启动技术,从SVPWM控制策略到电网重构实战。通过详细的三环控制架构和黑启动五阶段技术路线,展示储能电站在电网故障时如何快速切换为独立电压源并实现电网重建。文章还探讨了虚拟惯量补偿、多站协同控制等前沿技术,为电力系统应急恢复提供关键解决方案。

weixin_30509393的博客 304

本地部署大模型 vs 网页版大模型区别

fill:#333;color:#333;color:#333;fill:none;本地服务器/工作站硬件资源私有化部署GPU集群高速存储模型文件训练框架推理引擎。

Ds-Rag的博 1712

PTA 7-3 螺旋方阵(防溢出)

PTA 7-3 螺旋方阵(防溢出) 题目要求: 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式:输入在一行中给出一个正整数N(<10)。 输出格式:输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 问

重复的出发点的博客 3839

PSM倾向匹配详细步骤和程序

目录1.安装psmatch2统计包。2.数据准备3.数据分析及命令解读4.结果解读4.1模型拟合结果,此处无太多实际意义。4.2试验组可匹配的观测概览,按照命令中设定的匹配规则,试验组有8例患者未能匹配到合适对照。4.3结果解读的重点应该是对stata新生成的中间变量的解读。4.4均衡性检验结果4.5匹配结果的图示化5.Stata命令汇总最后留下两个问题给大家思考:题目 试验设计中,匹配的目的在于确保干预效应估计是建立在可比个体之间的不同结果的基础上。最简单的匹配方式是将干预组和对照组中协变量值相同的两个个

平平淡淡,戒急用忍,一生学闭嘴。 5万+

7-5 螺旋方阵 (20分) 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

代码思路: 1.先尝试构造出外圈数字 /* 顺序: up-right-down-left 1 2 3 4 5 16 0 0 0 6 15 0 0 0 7 14 0 0 0 8 13 12 11 10 9 */ #include <stdio.h> #define N 10 int main() { int i,j,k,n,a[N][N]={0},value=1; scanf("%d",&n); //up for(j=.

流楚丶格念的博客 1万+

Unity游戏Mono注入实战:从反编译到功能扩展

本文详细介绍了Unity游戏Mono注入的完整实战流程,从使用dnSpy反编译游戏核心逻辑,到编写自定义C#功能DLL,再到利用SharpMonoInjector进行动态注入。文章深入讲解了如何通过Harmony库拦截修改游戏方法,并介绍了使用MelonLoader框架和UnityExplorer进行高级模组开发与调试,最终通过一个游戏对象透视(ESP)案例演示了功能扩展的实现。

weixin_29018335的博客 458

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

#include<stdio.h> int main(void){ int n,i,j; scanf("%d",&n); int a[10][10],index,num,m=1; num=n; for(index=0;index<=n-1;index++){ for(j=index;j<n;j++){ a[index][j]=m; m++; } for(i=index;i<n-1;i++){ a[i+1][n-1]=m; m++; .

jobsbeliever的博客 2384

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 这是最基本的思路 #include "stdio.h" int main(void) { int a[10][10], n, x, y, z, w, m = 1; scanf("%d", &n); fo...

weixin_45977617的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

螺旋方阵简单做法

所谓螺旋方阵,就是从外往里绕,如下图↓(4*4的螺旋方阵)

2301_77950107的博客 1176

7-7 螺旋方阵(20 分)

7-7 螺旋方阵(20 分) 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。输入样例:5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24

云杉木屋 1万+

1、螺旋矩阵

文章目录1、题干2、思路3、解题1、复杂度为O(n^3) 1、题干 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。 输入格式: 一个数字N,与一个数字M(N<30,M<900) 输出格式: M在N*N的螺旋方阵中的行列数 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 结尾无空行 2、思路

m0_63411853的博客 921

螺旋方阵

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 2...

raining_day101的博客 619

(模拟)螺旋方阵 (25 分)

螺旋方阵(25分) 所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(&lt;10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 1...

755

实验7-2-9 螺旋方阵 (20分)

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。 输入格式: 输入在一行中给出一个正整数N(<10)。 输出格式: 输出N×N的螺旋方阵。每行N个数字,每个数字占3位。 输入样例: 5 输出样例: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 #include<stdio.h> #inclu

Ohh_ckx的博客 2420

C语言.螺旋方阵

螺旋型递减顺序输出n行n列的数字方阵,每个数字占4个宽度,左对齐。本题要求从右下角开始按螺旋型递减打印数字方阵。输入为一个正整数n (1=

m0_74000825的博客 2470

7-5 螺旋方阵

7-5 螺旋方阵分数 20全屏浏览题目切换布局作者 C课程组单位 浙江大学所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

tang7mj的博客 3217
上一篇: 归并排序java(内附超详解图文讲解)
下一篇: MySQL基础(DML,DQL,增删改查)
热爱编程的小白白
热爱编程的小白白 新星计划导师 新星计划导师
博客等级 码龄5年 11万+粉丝 243原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱编程的小白白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值