输出螺旋数字正方形java_Java实现顺时针输出螺旋二维数组的方法示例
最近看到一道有点意思的逻辑算法题,便着手实现一下。题目是要求打印 出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实现顺时针输出螺旋二维数组的方法示例相关推荐
- c语言将字符串按空格分割_字符串单词输入反向输出怎么搞?C语言又带着二维数组来了!...
01 今天给大家安利一份代码,是关于字符串单词输入反向输出的实现效果的,就比如等你输入"welcome to China",程序会经过处理输出"China to welc ...
- 算法笔记-螺旋输出二维数组
算法笔记-螺旋输出二维数组 1.思路:二维数组看做一个坐标,遍历者当成一个人,那么我们定义这个人的位置,以及当前面朝的方向,还有这个人转向次数.初始位置,人在(x,y)=(0,0)处,面向右方,右方的 ...
- 《漫画算法2》源码整理-5 二维数组螺旋输出
二维数组螺旋输出 public class SpiralOrder {public static List<Integer> spiralOrder(int[][] matrix) {Li ...
- java 二维数组输出菱形边_在二维数组Java中绘制数字菱形
我一直在解决一些编码问题,以便为编码面试做好准备,并发现了一个似乎有些令人费解的问题.我花了一些时间解决了这个问题;但是,代码看起来是硬编码的,没有样式.所以,我想知道我是否能得到一些关于代码样式的反 ...
- 怎么输出一个二维数组_LeetCode54与59,一个口诀教会你旋转二维数组
Halo, 好久不见各位小伙伴,这几天工作是在是太忙了,忙到都没有足够的时间去继续写算法题目,那么今天一次性带来两道比较类似的题目,在LeetCode中属于中等难度的题目.但其实只要你掌握其中的要点, ...
- 1.22 实例:Java输出杨辉三角形(使用二维数组)
利用 Java 的二维数组来输出指定行数的杨辉三角形. 杨辉三角形由数字进行排列,可以把它看作是一个数字表,其基本特性是两侧数值均为 1,其他位置的数值是其左上方数值与右上角数值之和.打印杨辉三角形时 ...
- python输出杨辉三角啊二维数组_Java输出杨辉三角形(使用二维数组)
在<Java输出杨辉三角形>一节中我们使用 Java 语言中的流程控制语句输出一个指定行数的杨辉三角形.本节我们利用 Java 的二维数组来输出指定行数的杨辉三角形. 杨辉三角形由数字进行 ...
- c语言二维数组对角线输出字符,用C编程一个4*4的矩阵,用二维数组,求对角线元素的和。,c语言如何使二维数组 输出为矩阵的形式...
导航:网站首页 > 用C编程一个4*4的矩阵,用二维数组,求对角线元素的和.,c语言如何使二维数组 输出为矩阵的形式 用C编程一个4*4的矩阵,用二维数组,求对角线元素的和.,c语言如何使二维数 ...
- php中遍历二维数组并以表格的形式输出
一.索引数组 //使用array()语句结构将联系人列表中所有数据声明为一个二维数组,默认下标是顺序数字索引 $contact1=array( //定义外层数组 array(1,'高某','A公司', ...
最新文章
- 经验 | 秋招总结(拼多多,腾讯,百度,字节)
- 利用cheat engine以及VC编写游戏修改器
- 计算机旁边快速访问没有桌面图标了怎么办,桌面找不到我的电脑(计算机)图标的解决办法-win10桌面显示我的电脑...
- flask sqlalchemy一对多关系详解
- JavaScript数组sort方法(数组排序)
- 截屏悬浮软件_功能强大,却小巧的录屏软件,不在错过你的王者时刻
- cxf javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)
- 十一章--软件设计与实现
- Vim批量注释、替换和缩进
- 性能测试——loadrunner_添加多个主机发送请求
- vue-cli3以上框架解决跨域问题
- Java程序设计基础(第五版)期末总复习
- 第三方支付分类方式综述
- mac python 连接oracle数据库(mac cx_Oracle.DatabaseError: DPI-1047: )
- Java发送附件到邮箱
- 引擎磨合 (Break In) 的秘密
- 【电路设计】AD绘制3D封装库
- 用Python自动批量提取Tableau报表数据源中用的数据库表
- 扁平化设计与思维导图
- system mysql服务
热门文章
- Entity Framework Core 命名约定
- 分布式事务与一致性算法Paxos amp; raft amp; zab
- 【错误异常大全】:ArcGIS Engine中C#无法引用ESRI.ArcGIS.AxControls问题
- C#窗体的Load事件与Shown事件的区别
- Android之编译提示error: Apostrophe not preceded by
- linux之vim复制多行、光标跳转到指定行、插入当前光标上和下行
- Android之基于xmpp openfire smack开发之openfire介绍和部署[1]
- python简介及环境安装
- python打开浏览器-python调用浏览器,打开一个网址
- filegetcontents php 返回值,php – file_get_contents没有返回任何数据