将矩阵从里到外分为多层,每一层都是一个口字型数字序列,方向都是顺时针/逆时针,由此我们可以将问题分解为相同的子问题来解决


回形矩阵概述

☃ 回形矩阵有n行n列

☃ 数字按顺时针或者逆时针递增

使用Java打印n*n回形矩阵

  1. /*
  2. * 打印长为n的回形数
  3. *y\x------------
  4. *| 1 2 3 4
  5. *| 12 13 14 5
  6. *| 11 16 15 6
  7. *| 10 9 8 7
  8. */
  9. public class RingArray {
  10. @SuppressWarnings("resource")
  11. public static void main(String[] args) {
  12. /*
  13. * 打印长为n的回形数
  14. *y\x------------
  15. *| 1 2 3 4
  16. *| 12 13 14 5
  17. *| 11 16 15 6
  18. *| 10 9 8 7
  19. */
  20. pointRingArray1();
  21. pointRingArray2();
  22. }
  23. /*
  24. * @Description: 打印回形数方法1
  25. * @data: 下午3:01:21
  26. */
  27. public static void pointRingArray1() {
  28. int n = 0;
  29. System.out.print("请输入回形矩阵长度n:");
  30. @SuppressWarnings("resource")
  31. Scanner sc = new Scanner(System.in);
  32. n = sc.nextInt();
  33. // x,y的最小下标;x是横向,列;y是纵向,行
  34. int minX = 0,minY = 0;
  35. // x,y的最大下标;
  36. int maxX = n-1,maxY = n-1;
  37. int[][] arr = new int[n][n];
  38. int index = 1; //计数
  39. while(minX <= maxX) {
  40. for(int x = minX;x <= maxX;x++) {
  41. arr[minY][x] = index;
  42. index++;
  43. }
  44. minY++;
  45. for(int y = minY;y <= maxY;y++) {
  46. arr[y][maxX] = index;
  47. index++;
  48. }
  49. maxX--;
  50. for(int x = maxX; x >= minX;x--) {
  51. arr[maxY][x] = index;
  52. index++;
  53. }
  54. maxY--;
  55. for(int y = maxY; y >= minY;y--) {
  56. arr[y][minX]=index;
  57. index++;
  58. }
  59. minX++;
  60. }
  61. System.out.println("顺时针打印:");
  62. for(int y = 0;y < n;y++) {
  63. for(int x = 0;x < n;x++) {
  64. //顺时针打印
  65. System.out.print(String.format("%4d",arr[y][x]));
  66. //逆时针打印
  67. //System.out.print(String.format("%4d",arr[x][y]));
  68. }
  69. System.out.println();
  70. }
  71. }
  72. /*
  73. * @Description: 打印回形数方法2
  74. * @data: 下午3:01:21
  75. */
  76. @SuppressWarnings("resource")
  77. public static void pointRingArray2() {
  78. Scanner scanner = new Scanner(System.in);
  79. System.out.print("请输入回形矩阵长度n:");
  80. int len = scanner.nextInt();
  81. int[][] arr = new int[len][len];
  82. int s = len * len;
  83. /*
  84. * k = 1:向右 k = 2:向下 k = 3:向左 k = 4:向上
  85. */
  86. int k = 1;
  87. int i = 0, j = 0;
  88. for (int m = 1; m <= s; m++) {
  89. if (k == 1) {
  90. if (j < len && arr[i][j] == 0) {
  91. arr[i][j++] = m;
  92. } else {
  93. k = 2;
  94. i++;
  95. j--;
  96. m--;
  97. }
  98. } else if (k == 2) {
  99. if (i < len && arr[i][j] == 0) {
  100. arr[i++][j] = m;
  101. } else {
  102. k = 3;
  103. i--;
  104. j--;
  105. m--;
  106. }
  107. } else if (k == 3) {
  108. if (j >= 0 && arr[i][j] == 0) {
  109. arr[i][j--] = m;
  110. } else {
  111. k = 4;
  112. i--;
  113. j++;
  114. m--;
  115. }
  116. } else if (k == 4) {
  117. if (i >= 0 && arr[i][j] == 0) {
  118. arr[i--][j] = m;
  119. } else {
  120. k = 1;
  121. i++;
  122. j++;
  123. m--;
  124. }
  125. }
  126. }
  127. System.out.println("逆时针打印:");
  128. for (int m = 0; m < arr.length; m++) {
  129. for (int n = 0; n < arr[m].length; n++) {
  130. //顺时针打印
  131. //System.out.print(String.format("%4d",arr[m][n]));
  132. //逆时针打印
  133. System.out.print(String.format("%4d",arr[n][m]));
  134. }
  135. System.out.println();
  136. }
  137. }
  138. }

效果:


本博客与CSDN博客༺ཌ༈君☠纤༈ད༻同步发布

回形数字矩阵(Java)的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 基础练习 回形取数 (循环 + Java 输入输出外挂)

      基础练习 回形取数   时间限制:1.0s   内存限制:512.0MB        问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方 ...

  3. Java实现回形数,只利用数组、循环和if-else语句

    import java.util.Scanner; public class learn { public static void main(String[] args){ System.out.pr ...

  4. Java实现 蓝桥杯VIP 基础练习 回形取数

    问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...

  5. 【Java】回形数

    回形数 键盘读入一个整数n(1-20),以n为矩阵大小,把1,2,3,4,5-按顺时针螺旋的形式填入. import java.util.Scanner; public class HuiXingSh ...

  6. java 给定一个日期期间 返回形如Mar 2015 3/20-3/31的数据

    最近一个项目中有个前台对于表头要求: 给定一个日期期间返回形如 Mar 2015 3/20-3/31Apr 2015 4/1-4/30 这样的月年数据,简单的写了下代码,暂时没想到更好的办法 例如传进 ...

  7. 蓝桥杯 基础练习 BASIC-25 回形取数

    基础练习 回形取数   时间限制:1.0s   内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 ...

  8. java 基本语法(十一) 数组(四)数组的常见算法

    1.数组的创建与元素赋值: 杨辉三角(二维数组).回形数(二维数组).6个数,1-30之间随机生成且不重复. 杨辉三角 public class YHSJ { public static void m ...

  9. Hill密码解密过程(Java)

    Hill密码是一种传统的密码体系.加密原理:选择一个二阶可逆整数矩阵A称为密码的加密矩阵,也就是这个加密体系的密钥.加密过程: 明文字母依次逐对分组,例如加密矩阵为二阶矩阵,明文就两个字母一组,如果最 ...

随机推荐

  1. IIS网站部署配置

    1.配置Session State

  2. RestTemplate + okhttp 实现远程调用

    1. 添加依赖 <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp --> <dependency ...

  3. 五种编程语言解释数据结构与算法——顺序表2(java与C++语言实现)

    5.java实现方式: 5.1.顺序表的抽象结构 package com.xgp.顺序表; public interface MyList<T> { //1. initList(& ...

  4. jQuery---事件解绑与事件触发

    事件解绑与事件触发 $("p").off("click"); $("#btn").on("click", functio ...

  5. 删除Win10菜单中的幽灵菜单(ms-resource:AppName/Text )

    新建一个 .bat文件,输入以下内容 @echo off taskkill /f /im explorer.exe taskkill /f /im shellexperiencehost.exe ti ...

  6. Julia 入门学习教程

    有一门语言,它看起来像 Python ,感觉起来像 Lisp ,运行起来又像 C 一样快速,他就是Julia. 近年来,Julia 语言已然成为编程界的新宠,尤其在科学计算和人工智能领域炙手可热. 据 ...

  7. 社会工程学 | 浅谈“答题”APP的赌博骗局

    本文写于2018年2月18日,转载于我的知乎文章,请结合实际阅读. 这么多年来在认识的网骗手段越来越多了,考虑到今后工作方向,会继续记录.   微信小程序"头脑王者"被封禁后,更多 ...

  8. Page Object设计模式(二)——poium测试库

    一.简介 poium是一个基于Selenium/appium的Page Object测试库,最大的特点是简化了Page层元素的定义. 项目地址:https://github.com/SeldomQA/ ...

  9. DFT 问答 I

    Q: Boundary Scan是什么?应用场景是什么?实现的方法是什么?挑战是什么? A: Boundary Scan就是边界扫描,是由Joint Test action Group起草的规范,最初 ...

  10. MySQL 8 mysql system schema

    在大的分类上:mysql schema包括存储数据库对象元数据的数据字典表和用于其他操作目的的系统表 数据字典表和系统表一般使用InnoDB存储引擎 与之前的版本不同,数据字典表和系统表存储在数据目录 ...