n阶螺旋矩阵(java)
题目描述:编写一个程序,对任意输入的正整数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)相关推荐
- 解答私信@田田WX //2020-12-30 左右n阶螺旋矩阵
输出下面的n(3<=n<=19)阶螺旋矩阵.输入n(=5),输出如下左图所示的螺旋矩阵.输入-n(=-5),输出如下右图所示的螺旋矩阵. 顺时针右旋 1 2 3 4 5 16 17 18 ...
- java编写螺旋矩阵讲解_Java如何实现螺旋矩阵 Java实现螺旋矩阵代码实例
本篇文章小编给大家分享一下Java实现螺旋矩阵代码实例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时 ...
- 螺旋矩阵 java实现(待消化)
import java.util.Scanner;/*** @author:(LiberHome)* @date:Created in 2019/3/4 17:13* @description:* @ ...
- 递归实现n阶螺旋矩阵问题
一.可以手动作图,从N=3开始可以看出,一个大的螺旋矩阵的内部是一个小的矩阵. 由此引入递归的思维.递归式大概是:func (大螺旋矩阵) = 4条外边 + func(小螺旋矩阵). 二.设计递归函数 ...
- 用java实现螺旋矩阵算法
用java实现螺旋矩阵算法 一.思路讲解 刚拿到这道题的时候想的是一圈一圈的实现一个螺旋矩阵,但我觉得那样的方法太麻烦了,在网上看到一个大佬的算法觉得挺好的,自己总结了一下,拿出来给大家分享分享. 这 ...
- java 螺旋方阵_Java for 螺旋矩阵和蛇型矩阵
螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵问题,这两个问题的答案也有许多种,简单问一下Baidu,就各自有N种实现,来源也非常丰富,比如CSDN.ITEYE.等等,当然也包括著名的OSC,但是整体看下来 ...
- c语言编程 输入螺旋数组,C语言 经典题目螺旋矩阵 实例详解
C语言 经典题目螺旋矩阵 实例详解 C语言 经典题目螺旋矩阵 //N阶螺旋矩阵 #include #include int main() { int N,i,j,n,num=1; int a[10][ ...
- 悠然乱弹:螺旋矩阵和蛇型矩阵的悠然版实现
2019独角兽企业重金招聘Python工程师标准>>> 螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵,有许多的公司面试题中有出现,这两个题的答案也有许多种,简单问一下度娘,就各自有N种实 ...
- MxN螺旋矩阵(由外向内)
问题描述 按顺时针方向构建一个MxN的螺旋矩阵(或按顺时针方向螺旋访问一个MxN的矩阵):在不构造螺旋矩阵的情况下,给定坐标i.j值求其对应的值f(i, j).如对11x7 矩阵, f(4, 0) = ...
最新文章
- 移动端自动化测试 Appium 框架之数据驱动
- javaweb:servlet过滤器
- 热浪(信息学奥赛一本通-T1379)
- 【答阿里寒冬面试题】呵呵,大神的面试题就是好!
- redis复制key的数据_Redis常见面试题
- 中文文本对齐_word排版技巧:如何让词组文字分散对齐
- StarWind RAM 磁盘仿真程序
- Ubuntu桌面环境 安装与切换
- 《深入理解计算机系统(修订版)》读感
- linux非root用户添加rzsz,Linux rz sz 安装
- 网站被挂马,谨防IIS模块挂马
- 计算机原理处理器,多处理器结构-微计算机原理-电子发烧友网站
- BIMC中国最权威的电子商务托管运营商
- 国内代理ip的爬取,构建ip代理池@2
- 【NLP】语料库和词汇知识库
- mysql数据库教程级联_Mysql实现级联操作(级联更新、级联删除)
- M手记-计算机基本硬件与组成
- 2022 年十大最佳网络分析工具介绍
- Coreldraw绘画看了这个才算是真正明白了什么叫绘图
- 单线激光雷达(Lidar)学习一:使用单线lidar进行测距
热门文章
- eclipse关不掉
- Python 多继承
- MaxCompute客户端(odpscmd)
- 数字经济时代工业互联网网络安全国际标准研究及启示
- 推荐今日 火火火火 的开源项目
- 数字图像处理-第十周-理论课
- Java web连接数据库实现登录功能 ; jsp连接MySQL或SQL server数据库的jar包也在这里哦!
- TDSQL-C 真·秒级启停:连接断了,又没断
- [Jpa save方法报错 ] : SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not ex
- GJB 软件研制总结报告(模板)