题目描述:编写一个程序,对任意输入的正整数n,产生并显示n阶螺旋式数字方阵。
如n=4时 显示的方阵为:
n=5时 显示的方阵为:

解题思路:
我所用的原理是递归加上普通的循环,从最外层开始赋值,通过递归对次外层进行赋值,赋值通过循环来实现。
给每一层循环附上条件:
最外一层n=4,元素个数为4*n-4=12


最外一层n=5,元素个数为4n-4=16
次外层n=3,元素个数为4n-4=8
最内层n=1,元素个数为1(属于特殊情况)

循环部分代码:

for(int i = 1;i<=4*n-4;i++){if(Col<n-1+tag && Row==start){    //向右arr[Row][Col] = index;Col++;}else if(Col==n-1+tag && Row<n-1+tag){        //向下arr[Row][Col] = index;Row++;}else if(Row==n-1+tag && Col>start){        //向左arr[Row][Col] = index;Col--;}else if(Col==start && Row>start){      //向上arr[Row][Col] = index;Row--;}index++;}

4个 if 的执行范围分别为①②③④

在由外向里计算时,每往里一层,横纵的起始坐标都+1,这里我用tag来标记,最外层tag=0,每往里一层,tag++.
每层的开始坐标用start表示,最外层start=0 , 即从arr[0][0]开始
第二层start=1,从arr[1][1]开始,以此类推。
index为需要给数组赋的值,每循环一次index++.
执行完循环语句后,根据n的值判断是否进入下一层递归,
最外层与次外层之间的n相差为2,则n=n-2.

n=3,则内层n=3-2=1,属特殊情况,对其单独赋值

 if(n==3)arr[start+1][start+1] = index;

n>3 , 进入下一层递归

 if(n>3)F(start+1,arr,index,n-2,tag+1);

代码实现:

  static void F(int start,int[][] arr,int index,int n,int tag){   //仅当n>=2时使用Fint Row = start;int Col = start;for(int i = 1;i<=4*n-4;i++){if(Col<n-1+tag && Row==start){       //向右arr[Row][Col] = index;Col++;}else if(Col==n-1+tag && Row<n-1+tag){  //向下arr[Row][Col] = index;Row++;}else if(Row==n-1+tag && Col>start){    //向左arr[Row][Col] = index;Col--;}else if(Col==start && Row>start){      //向上arr[Row][Col] = index;Row--;}index++;}if(n>3)F(start+1,arr,index,n-2,tag+1);if(n==3)arr[start+1][start+1] = index;}
}

测试类:

public static void main(String[] args){Scanner in = new Scanner(System.in);int n = in.nextInt();int[][] arr = new int[n][n];F(0,arr,1,n,0);for (int i = 0; i < n; i++) {    //输出矩阵for (int j = 0; j < n; j++) {System.out.print(arr[i][j]+"\t");if(j==n-1)System.out.println();}}
}

输出示例:

n阶螺旋矩阵(java)相关推荐

  1. 解答私信@田田WX //2020-12-30 左右n阶螺旋矩阵

    输出下面的n(3<=n<=19)阶螺旋矩阵.输入n(=5),输出如下左图所示的螺旋矩阵.输入-n(=-5),输出如下右图所示的螺旋矩阵. 顺时针右旋 1 2 3 4 5 16 17 18 ...

  2. java编写螺旋矩阵讲解_Java如何实现螺旋矩阵 Java实现螺旋矩阵代码实例

    本篇文章小编给大家分享一下Java实现螺旋矩阵代码实例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时 ...

  3. 螺旋矩阵 java实现(待消化)

    import java.util.Scanner;/*** @author:(LiberHome)* @date:Created in 2019/3/4 17:13* @description:* @ ...

  4. 递归实现n阶螺旋矩阵问题

    一.可以手动作图,从N=3开始可以看出,一个大的螺旋矩阵的内部是一个小的矩阵. 由此引入递归的思维.递归式大概是:func (大螺旋矩阵) = 4条外边 + func(小螺旋矩阵). 二.设计递归函数 ...

  5. 用java实现螺旋矩阵算法

    用java实现螺旋矩阵算法 一.思路讲解 刚拿到这道题的时候想的是一圈一圈的实现一个螺旋矩阵,但我觉得那样的方法太麻烦了,在网上看到一个大佬的算法觉得挺好的,自己总结了一下,拿出来给大家分享分享. 这 ...

  6. java 螺旋方阵_Java for 螺旋矩阵和蛇型矩阵

    螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵问题,这两个问题的答案也有许多种,简单问一下Baidu,就各自有N种实现,来源也非常丰富,比如CSDN.ITEYE.等等,当然也包括著名的OSC,但是整体看下来 ...

  7. c语言编程 输入螺旋数组,C语言 经典题目螺旋矩阵 实例详解

    C语言 经典题目螺旋矩阵 实例详解 C语言 经典题目螺旋矩阵 //N阶螺旋矩阵 #include #include int main() { int N,i,j,n,num=1; int a[10][ ...

  8. 悠然乱弹:螺旋矩阵和蛇型矩阵的悠然版实现

    2019独角兽企业重金招聘Python工程师标准>>> 螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵,有许多的公司面试题中有出现,这两个题的答案也有许多种,简单问一下度娘,就各自有N种实 ...

  9. MxN螺旋矩阵(由外向内)

    问题描述 按顺时针方向构建一个MxN的螺旋矩阵(或按顺时针方向螺旋访问一个MxN的矩阵):在不构造螺旋矩阵的情况下,给定坐标i.j值求其对应的值f(i, j).如对11x7 矩阵, f(4, 0) = ...

最新文章

  1. 移动端自动化测试 Appium 框架之数据驱动
  2. javaweb:servlet过滤器
  3. 热浪(信息学奥赛一本通-T1379)
  4. 【答阿里寒冬面试题】呵呵,大神的面试题就是好!
  5. redis复制key的数据_Redis常见面试题
  6. 中文文本对齐_word排版技巧:如何让词组文字分散对齐
  7. StarWind RAM 磁盘仿真程序
  8. Ubuntu桌面环境 安装与切换
  9. 《深入理解计算机系统(修订版)》读感
  10. linux非root用户添加rzsz,Linux rz sz 安装
  11. 网站被挂马,谨防IIS模块挂马
  12. 计算机原理处理器,多处理器结构-微计算机原理-电子发烧友网站
  13. BIMC中国最权威的电子商务托管运营商
  14. 国内代理ip的爬取,构建ip代理池@2
  15. 【NLP】语料库和词汇知识库
  16. mysql数据库教程级联_Mysql实现级联操作(级联更新、级联删除)
  17. M手记-计算机基本硬件与组成
  18. 2022 年十大最佳网络分析工具介绍
  19. Coreldraw绘画看了这个才算是真正明白了什么叫绘图
  20. 单线激光雷达(Lidar)学习一:使用单线lidar进行测距

热门文章

  1. eclipse关不掉
  2. Python 多继承
  3. MaxCompute客户端(odpscmd)
  4. 数字经济时代工业互联网网络安全国际标准研究及启示
  5. 推荐今日 火火火火 的开源项目
  6. 数字图像处理-第十周-理论课
  7. Java web连接数据库实现登录功能 ; jsp连接MySQL或SQL server数据库的jar包也在这里哦!
  8. TDSQL-C 真·秒级启停:连接断了,又没断
  9. [Jpa save方法报错 ] : SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not ex
  10. GJB 软件研制总结报告(模板)