最近看到一道有点意思的逻辑算法题,便着手实现一下。题目是要求打印 出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

Java 实现示例代码如下:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

int n = in.nextInt();

int[][] rect = new int[n + 1][n + 1];

int x = 0, y = 1; // 当前遍历的位置

int px = 1, py = 0; // x/y 在当前循环方向的增量

int pn = n; // 该方向上还需要多少个数字(会递减,因为顺时针往里缩)

int sum = 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

/** 翻转矩阵为逆时针(为了便于后面逻辑处理,输出的时候再翻转回去) */

// 1 16 15 14 13

// 2 17 24 23 12

// 3 18 25 22 11

// 4 19 20 21 10

// 5 6 7 8 9

for (int i = 1; i <= n * n; i++) { // 翻转矩阵循环

// 移到下一个点(第一次方向1->5 x增量为1, y的增量为0, 第二次方向为6->9,x增量为0,y增量为1,pn减少一个)

x += px;

y += py;

rect[x][y] = i;

if (i == sum) { // 到达该方向的最后一个点

if (px == 1 || px == -1) { // x的增量不为0,则为竖向 -> 横向

pn = pn - 1; // 竖向变为横向的时候,该方向上数字的个数会减少一个

sum = sum + pn;

py = px;

px = 0;

} else { // x的增量为0, y的增量不为0,则为横向 -> 竖向

sum = sum + pn;

px = -py;

py = 0;

}

}

}

for (int i = 1; i <= n; i++) {

for (int j = 1; j <= n; j++) {

System.out.print(rect[j][i] + "\t"); // 翻转复原输出

}

System.out.println();

}

}

}

输出测试

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用java能带来一定的帮助,如果有疑问大家可以留言交流。

输出螺旋数字正方形java_Java实现顺时针输出螺旋二维数组的方法示例相关推荐

  1. c语言将字符串按空格分割_字符串单词输入反向输出怎么搞?C语言又带着二维数组来了!...

    01 今天给大家安利一份代码,是关于字符串单词输入反向输出的实现效果的,就比如等你输入"welcome to China",程序会经过处理输出"China to welc ...

  2. 算法笔记-螺旋输出二维数组

    算法笔记-螺旋输出二维数组 1.思路:二维数组看做一个坐标,遍历者当成一个人,那么我们定义这个人的位置,以及当前面朝的方向,还有这个人转向次数.初始位置,人在(x,y)=(0,0)处,面向右方,右方的 ...

  3. 《漫画算法2》源码整理-5 二维数组螺旋输出

    二维数组螺旋输出 public class SpiralOrder {public static List<Integer> spiralOrder(int[][] matrix) {Li ...

  4. java 二维数组输出菱形边_在二维数组Java中绘制数字菱形

    我一直在解决一些编码问题,以便为编码面试做好准备,并发现了一个似乎有些令人费解的问题.我花了一些时间解决了这个问题;但是,代码看起来是硬编码的,没有样式.所以,我想知道我是否能得到一些关于代码样式的反 ...

  5. 怎么输出一个二维数组_LeetCode54与59,一个口诀教会你旋转二维数组

    Halo, 好久不见各位小伙伴,这几天工作是在是太忙了,忙到都没有足够的时间去继续写算法题目,那么今天一次性带来两道比较类似的题目,在LeetCode中属于中等难度的题目.但其实只要你掌握其中的要点, ...

  6. 1.22 实例:Java输出杨辉三角形(使用二维数组)

    利用 Java 的二维数组来输出指定行数的杨辉三角形. 杨辉三角形由数字进行排列,可以把它看作是一个数字表,其基本特性是两侧数值均为 1,其他位置的数值是其左上方数值与右上角数值之和.打印杨辉三角形时 ...

  7. python输出杨辉三角啊二维数组_Java输出杨辉三角形(使用二维数组)

    在<Java输出杨辉三角形>一节中我们使用 Java 语言中的流程控制语句输出一个指定行数的杨辉三角形.本节我们利用 Java 的二维数组来输出指定行数的杨辉三角形. 杨辉三角形由数字进行 ...

  8. c语言二维数组对角线输出字符,用C编程一个4*4的矩阵,用二维数组,求对角线元素的和。,c语言如何使二维数组 输出为矩阵的形式...

    导航:网站首页 > 用C编程一个4*4的矩阵,用二维数组,求对角线元素的和.,c语言如何使二维数组 输出为矩阵的形式 用C编程一个4*4的矩阵,用二维数组,求对角线元素的和.,c语言如何使二维数 ...

  9. php中遍历二维数组并以表格的形式输出

    一.索引数组 //使用array()语句结构将联系人列表中所有数据声明为一个二维数组,默认下标是顺序数字索引 $contact1=array( //定义外层数组 array(1,'高某','A公司', ...

最新文章

  1. 经验 | 秋招总结(拼多多,腾讯,百度,字节)
  2. 利用cheat engine以及VC编写游戏修改器
  3. 计算机旁边快速访问没有桌面图标了怎么办,桌面找不到我的电脑(计算机)图标的解决办法-win10桌面显示我的电脑...
  4. flask sqlalchemy一对多关系详解
  5. JavaScript数组sort方法(数组排序)
  6. 截屏悬浮软件_功能强大,却小巧的录屏软件,不在错过你的王者时刻
  7. cxf javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)
  8. 十一章--软件设计与实现
  9. Vim批量注释、替换和缩进
  10. 性能测试——loadrunner_添加多个主机发送请求
  11. vue-cli3以上框架解决跨域问题
  12. Java程序设计基础(第五版)期末总复习
  13. 第三方支付分类方式综述
  14. mac python 连接oracle数据库(mac cx_Oracle.DatabaseError: DPI-1047: )
  15. Java发送附件到邮箱
  16. 引擎磨合 (Break In) 的秘密
  17. 【电路设计】AD绘制3D封装库
  18. 用Python自动批量提取Tableau报表数据源中用的数据库表
  19. 扁平化设计与思维导图
  20. system mysql服务

热门文章

  1. Entity Framework Core 命名约定
  2. 分布式事务与一致性算法Paxos amp; raft amp; zab
  3. 【错误异常大全】:ArcGIS Engine中C#无法引用ESRI.ArcGIS.AxControls问题
  4. C#窗体的Load事件与Shown事件的区别
  5. Android之编译提示error: Apostrophe not preceded by
  6. linux之vim复制多行、光标跳转到指定行、插入当前光标上和下行
  7. Android之基于xmpp openfire smack开发之openfire介绍和部署[1]
  8. python简介及环境安装
  9. python打开浏览器-python调用浏览器,打开一个网址
  10. filegetcontents php 返回值,php – file_get_contents没有返回任何数据