刷题精选:顺时针输出递增数组

  • 题目描述
  • 算法分析
  • 代码分析

题目描述


由上图描述,输入一个数字n,代表n行n列,之后经过函数之后顺时针的将从1到n打印出来。

算法分析

通过找规律,我们可以发现,最终的结果是一个正方形,那么我们可以联想到用一个二维数组按顺序来存储这些数字,最后输出二维数组即可,同时,这些数字是一圈一圈按照顺时针递增的,因此我们可以将这个二维数组拆开一圈一圈来看,我们画图来表示一下
以n=5为例

最后的二维数组需要储存成这个样子,那么我们可以将其分为三圈
第一圈:

第二圈:

第三圈:

我们如果按照圈来储存的话,那么他们按照顺时针存储的规律就是一样的了,即先顺序的储存最上边的一行,然后顺序的储存最右边的一列,之后再倒序的存储最下边的一行,最后倒序的存储最左边的一行,那么储存完一圈后,继续按照这个循环,每存储完一圈之后,开始行,结束行,开始列,结束列都会靠近(因为圈变小了)最后的第三圈只有一个数字,那么这个时候意味着开始行和结束行,开始列结束列已经相同了,当开始行大于结束行,开始列大于结束列时,循环结束,即二维数组储存完毕,最后直接输出二维数组即可

代码分析

import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User: hp* Date: 2022-07-12* Time: 11:08*/
public class Dragon {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int number = scanner.nextInt();//建立一个二维数组,储存所有的数字的顺时针版本,最后只需输出这个二维数组即可int[][] result= new int[number][number];//开始列,因为是数组因此以0开头int startC = 0;//结束列,因为是数组为了不使得下标超出因此-1int endC = number - 1;int startR = 0;int endR = number - 1;//定义计数器,记录每个位置的数字int count = 1;//每次循环过程中四个变量都会逐渐接近,当start大于end时,结束循环while(startC <= endC && startR <= endR){//先输出顶行的,顺序输出(从左向右)//从起始列开始,到结束列for (int i = startC; i <= endC; i++) {result[startR][i] = count;count++;}//每一顶行输出完,下一次就是下一行了,因此startR++startR++;//输出右边一列的,顺序输出(从上到下)//从当时的起始行开始,因为上边循环已经输出完了顶行,因此直接从下一行开始输出//刚刚已经对startR++了,所以直接使得i=startR即可for (int i = startR; i <= endR; i++) {result[i][endC] = count;count++;}//因为输出完了右边一列,右边一列意味着结束列,下一次执行这个for循环则会是//这一列的内部(左边)一列,因此endR--endC--;//再输出底部一行,倒序输出(从右向左),直接由当前的结束列开始for (int i = endC; i >= startC; i--) {result[endR][i] = count;count++;}//底部一行填充完毕,因此endR--endR--;//在输出左边一列,也是从结束行开始,倒序输出(从下到上)for (int i = endR; i >= startR; i--) {result[i][startC] = count;count++;}//左边一列填充完毕,开始列加一startC++startC++;}//输出数组for (int i = 0; i < number; i++) {for (int j = 0; j < number; j++) {System.out.print(result[i][j] + " ");}System.out.println();}

刷题精选:顺时针输出递增数组(螺旋递增升天数组)相关推荐

  1. LeetCode刷题精选(基于LeetCode企业题库2021年一月截止,字节,美团,网易,阿里,腾讯,共同题目)

    算法是面试中准备比较耗时的,但又不知从何刷起,数组,查找表,堆栈队列,二叉树,递归,动态规划,回溯,图- 如果每个专题都需要练习,那成本太大了, so 怎么做呢... 就是 干... 直接刷题-> ...

  2. 大学计算机基础-题库刷题-精选

    题库刷题: 写在前面: 这个是我准备应对学校转专业考试而刷的题库, 也是大学计算机的题库,同样适用于大学计算机这门课的期末考试. 精选了一些重要的题目. 目录 题库刷题: 写在前面: 题目1:(接下来 ...

  3. codeup刷题2.5小节 C/C++快速入门->数组——《算法笔记》(胡凡)

    习题6-4 有序插入 题目描述 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中. 假设数组长度为10,数组中前9个数(这9个数要求从键盘上输入,输入时要满足自小到大的输入顺序 ...

  4. Leetcode刷题100天(阿里云周赛)—查找数组中的所有重复项(哈希)—day42

    前言: 作者:神的孩子在歌唱 大家好,我叫运智 描述 给定一个整数数组,1 ≤ a[i] ≤ n(n = 数组的大小),一些元素出现两次,其他元素出现一次. 找到在此数组中出现两次的所有元素. 示例 ...

  5. D-OJ刷题日记:输出直接插入排序每趟比较的过程 题目编号:196

    在教材中直接插入排序的基础之上,加入输出比较过的元素的过程.最后输出排好序的结果. 输入描述 第一行输入待排序记录个数 第二行输入待排序序列 输出描述 输出每一趟比较的过程,每趟占一行输出最后排好序的 ...

  6. 洛谷、牛客网、AcWing 刷题(python版)

    牛客网python专项练习整理(一) https://blog.csdn.net/weixin_41913008/article/details/87203468 牛客网剑指offer--python ...

  7. P1926 小书童——刷题大军

    题目传送门:https://www.luogu.com.cn/problem/P1926 题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人. 文 ...

  8. 数据结构与算法一年刷题特训营

    [福利]C++语言基础       1.1 头文件.输入输出.格式.基本运算.mp4       2.1 if.swith语句.逻辑运算.mp4       3.1 for . break . con ...

  9. 力扣之数据结构入门的刷题总结

    目录 一.数组总结 1.vector数组 2.哈希表 二.字符串总结 三.链表总结 四.二叉树总结 0.树的定义 1.二叉树的前序.中序.后序遍历(递归)(DFS深度优先遍历) 2.二叉树的层序遍历( ...

最新文章

  1. c++入门之初话结构体
  2. 查看Linux下网卡状态或 是否连接(转)
  3. 【SSM】第一个SpringMVC入门示例
  4. C 库函数 - atoi()
  5. JVM源码分析之synchronized实现
  6. 征名公布|Qtum量子链企业版—Unita 中文名征集圆满落幕
  7. python实现决策树数据直接赋值导入_决策树在python中的数据实现
  8. TemplateSyntaxError at XXXX或页面样式未生效
  9. [导入]基于Spring+zk的WebDisk系统研究.pdf(462.84 KB)
  10. mysql主从复制与主主复制
  11. mysql没有开启binlog能恢复数据吗_【数据库】一个 rm -rf 把公司整个数据库删没了
  12. android react混合开发框架,7个混合式移动开发框架
  13. Excel:仅选择可见的单元格
  14. php酒店客房管理,基于PHP的酒店客房管理系统的设计与实现2.doc
  15. 迅雷下载出错应版权方要求文件无法下载
  16. Excel——如何批量从身份证号码中提取出年龄
  17. 分布式服务架构-第三章 服务化系统容量评估和性能保障
  18. Excel 里筛选手机号码所属运营商
  19. selenium 的显示等待与隐式等待
  20. 盘点:视频监控行业的潜在商机

热门文章

  1. 【经验总结】使用渐进式JPG改善用户体验
  2. 嵌入式项目流程(转+自己的理解)
  3. mysql导入sql脚本
  4. 【HanLP】eclipse/myeclipse下配置HanLP
  5. 【react】解决在外部设置react组件input的value问题
  6. Sublime Text3中文字体歪歪扭扭的解决方案
  7. appium基本操作
  8. Leetcode525.连续数组(又是连续之类的题目,结合前缀和)
  9. oracle spool生成文件,用spool+unix shell生成文本文件
  10. 知识图谱—关系抽取—远程监督—OpenNRE(一)