`
hp9016
  • 浏览: 20105 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

打印回型数组 回型矩阵 环形数组

阅读更多

论坛上的一个帖子http://topic.csdn.net/u/20081202/13/834d7cb0-a063-4754-a702-612f3053bd60.html?seed=996406603

1    2  3  4  5
14  15  16  17  6
13  20  19  18  7
12  11  10  9  8

请问这样一个矩阵怎么打印出来啊

 

解决方法(适用范围:非素数的int型数组):


 由总元素的数目n来决定数组的行数和列数,
 n的最中间约数作为行数的行数和列数,比如:20
 则行数为4,列数为5;再比如24,
 则行数为4,列数为6,再比如25,
则行数和列数均为5

 

下面为程序代码

  1. /**
  2.  * 
  3.  * @author hp9016
  4.  * @version 1.0
  5.  * 功能说明:实现回型数组的打印要求
  6.  * 
  7.  */
  8. public class ForLouZhu {
  9.     /**
  10.      * 主函数
  11.      */
  12.     public static void main(String[] a){
  13.         
  14.         /*
  15.          * n为总元素个数
  16.          * 可以修改n的值,看看运行效果
  17.          */
  18.         int n = 24;
  19.         new Array(n).print();
  20.     }
  21. }
  22. /**
  23.  * 
  24.  * @author hp9016
  25.  * @version 1.0
  26.  * 功能说明:存储行数和列数
  27.  * 
  28.  */
  29. class Row {
  30.     
  31.     /*
  32.      * 行数
  33.      */
  34.     private static int row;
  35.     
  36.     /*
  37.      * 列数,即每行多少个元素
  38.      */
  39.     private static int length;
  40.     
  41.     public static int getLength() {
  42.         return length;
  43.     }
  44.     public static void setLength(int length) {
  45.         Row.length = length;
  46.     }
  47.     public static int getRow() {
  48.         return row;
  49.     }
  50.     public static void setRow(int row) {
  51.         Row.row = row;
  52.     }
  53. }
  54. /**
  55.  * 
  56.  * @author hp9016
  57.  * @version 1.0
  58.  * 功能说明:实现楼主要求
  59.  * 
  60.  */
  61. class Array {
  62.     
  63.     /*
  64.      * 一共有多少个元素,即二维数组的总元素数
  65.      */
  66.     private int n = 0;    
  67.     
  68.     /*
  69.      * 行数
  70.      */
  71.     private int row = 0;
  72.     
  73.     /*
  74.      * 列数,即每行多少个元素
  75.      */
  76.     private int length = 0;
  77.     
  78.     /*
  79.      * 欲打印的数组
  80.      */
  81.     private int[][] arr;
  82.     
  83.     /**
  84.      * 构造方法
  85.      * @param n 总元素个数
  86.      */
  87.     public Array(int n){
  88.         this.n = n;
  89.     }
  90.     
  91.     /**
  92.      * 打印数组
  93.      *
  94.      */
  95.     public void print(){
  96.         
  97.         /*
  98.          * 填充数组
  99.          */
  100.         setArray();
  101.         for(int i = 0; i< row; i++){
  102.             for(int j = 0; j < length; j++){
  103.                 System.out.print(arr[i][j] + "  ");
  104.             }
  105.             System.out.println();
  106.         }
  107.     }
  108.     
  109.     /**
  110.      * 由总元素的数目n来决定数组的行数和列数,
  111.      * n的最中间约数作为行数的行数和列数,比如:20
  112.      * 则行数为4,列数为5;再比如24,
  113.      * 则行数为4,列数为6,再比如25,
  114.      * 则行数和列数均为5
  115.      *
  116.      */
  117.     private void setRow(){
  118.         int temp = (n + 1)/2;
  119.         int length = n;
  120.         
  121.         for(int i = 1; i <= temp; i++){
  122.             
  123.             if(i >= length){
  124.                 
  125.                 /*
  126.                  * 存储到bean中
  127.                  */
  128.                 Row.setLength(length);
  129.                 Row.setRow(n / length);
  130.                 break;
  131.             }
  132.             
  133.             if(n % i == 0){
  134.                 length = n / i;
  135.             }
  136.         }
  137.     }
  138.     
  139.     /**
  140.      * 核心函数
  141.      * 按楼主要求--绕圈填充数组
  142.      *
  143.      */
  144.     private void setArray(){
  145.         
  146.         /*
  147.          * 临时行号
  148.          */
  149.         int tempRow = 0;
  150.         
  151.         /*
  152.          * 临时列号
  153.          */
  154.         int tempLength = 0;
  155.         
  156.         /*
  157.          * 当前最小没有被填充的行号
  158.          */
  159.         int minRow = 0;
  160.         
  161.         /*
  162.          * 当前最小没有被填充的列号
  163.          */
  164.         int minLength = 0;
  165.         
  166.         /*
  167.          * 当前最大没有被填充的行号
  168.          */
  169.         int maxRow = row;
  170.         
  171.         /*
  172.          * 当前最大没有被填充的列号
  173.          */
  174.         int maxLength = length;
  175.         
  176.         /*
  177.          * 记录总元素数目
  178.          */
  179.         int i =1;
  180.         
  181.         setRow();
  182.         row = Row.getRow();
  183.         length = Row.getLength();
  184.         arr = new int[row][length];
  185.         arr[0][0] = 1;
  186.         maxRow = row - 1;
  187.         maxLength = length - 1;
  188.         
  189.         /*
  190.          * 本while的注释中的"最小"指:没有被填充的最小元素的下标
  191.          * "最大"指:没有被填充的最大元素的下标
  192.          * 填充的顺序如下:1>2>3>4
  193.          * |--1--|
  194.          * 4     2
  195.          * |--3--|
  196.          * 
  197.          */
  198.         while(i < n){
  199.             
  200.             /*
  201.              * 行号最小,列号最小时,类似于上图的1:
  202.              * 从左向右这个方向填充数组
  203.              */
  204.             if(tempRow == minRow && tempLength == minLength ){
  205.                 
  206.                 /*
  207.                  * 设置最大列数
  208.                  */
  209.                 while(arr[tempRow][maxLength] != 0 &
  210.                         maxLength > 0){
  211.                     maxLength--;
  212.                 }
  213.                 
  214.                 /*
  215.                  * 从左向右这个方向填充数组
  216.                  */
  217.                 while(tempLength < maxLength){
  218.                     tempLength++;
  219.                     i++;
  220.                     arr[tempRow][tempLength] = i;
  221.                 }
  222.             }
  223.             
  224.             /*
  225.              * 行号最小,列号最大时,类似于上图的2:
  226.              * 从上向下这个方向填充数组
  227.              */
  228.             if(tempRow == minRow && tempLength == maxLength ){
  229.                 
  230.                 /*
  231.                  * 设置最大行数
  232.                  */
  233.                 while(arr[maxRow][tempLength] != 0 &
  234.                         maxRow > 0){
  235.                     maxRow--;
  236.                 }
  237.                 
  238.                 /*
  239.                  * 从上向下这个方向填充数组
  240.                  */
  241.                 while(tempRow < maxRow){
  242.                     tempRow++;
  243.                     i++;
  244.                     arr[tempRow][tempLength] = i;
  245.                 }
  246.             }
  247.             
  248.             /*
  249.              * 行号最大,列号最大时,类似于上图的3:
  250.              * 从右向左这个方向填充数组
  251.              */
  252.             if(tempRow == maxRow && tempLength == maxLength ){
  253.                 
  254.                 /*
  255.                  * 设置最小列数
  256.                  */
  257.                 while(arr[tempRow][minLength] != 0 &
  258.                         minLength < length - 1){
  259.                     minLength++;
  260.                 }
  261.                 
  262.                 /*
  263.                  * 从右向左这个方向填充数组
  264.                  */
  265.                 while(tempLength > minLength){
  266.                     tempLength--;
  267.                     i++;
  268.                     arr[tempRow][tempLength] = i;
  269.                 }
  270.             }
  271.             
  272.             /*
  273.              * 行号最大,列号最大时,类似于上图的4:
  274.              * 从下向上这个方向填充数组
  275.              */
  276.             if(tempRow == maxRow && tempLength == minLength ){
  277.                 
  278.                 /*
  279.                  * 设置最小行数
  280.                  */
  281.                 while(arr[minRow][tempLength] != 0 &
  282.                         minRow < row -1){
  283.                     minRow++;
  284.                 }
  285.                 
  286.                 /*
  287.                  * 从下向上这个方向填充数组
  288.                  */
  289.                 while(tempRow > minRow){
  290.                     tempRow--;
  291.                     i++;
  292.                     arr[tempRow][tempLength] = i;
  293.                 }
  294.             }
  295.         }
  296.     }
  297. }
分享到:
评论

相关推荐

    C++回型矩阵

    用C++编写的回型矩阵,任意输入一个数字,然后以回型矩阵的形式显示出来

    回型矩阵填充代码

    回型矩阵,也被称为环形矩阵,是一种特殊的二维数组,其特点是元素的填充方式呈现出从中心向外环绕填充的模式。这种矩阵通常在编程问题中出现,例如数据存储、图像处理或者游戏开发等领域。理解并实现回型矩阵填充...

    C语言回型矩阵

    用C语言实现输入任意一个数字,然后以回型矩阵的形式显示出来,其中用数字填充回型矩阵,没有采用递归算法,而是简单判断条件然后循环至结束

    拆解世界五百强面试题--回型矩阵

    请用C语言实现 输入N,打印N*N矩阵 比如 N = 3, 打印: 1 2 3 8 9 4 7 6 5 N = 4, 打印 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7

    Return-type-matrix.rar_return_生成矩阵labview

    在LabVIEW编程环境中,回型矩阵(也称为环形矩阵)是一种特殊的数据结构,它具有特定的排列方式,数据在矩阵中的分布呈环状。这种矩阵类型常用于处理连续的数据流,例如在信号处理和数据传输中。"Return-type-matrix...

    JAVA 回型结构

    根据给定的文件标题“JAVA 回型结构”、描述“将黑方块与白方块排列成回型螺旋结构,大小可随意设定,小程序一个,字数要长”、标签“JAVA 回旋结构 数组”以及部分代码内容,我们可以深入探讨这个Java程序所涉及的...

    回型数 C++

    `print`函数负责将填充后的`flag`数组打印出来,展示回型数的排列结果。它遍历整个`flag`数组,按行输出每个元素。 #### 代码分析: 给定的代码示例中,使用了C++的`iostream`库进行输入输出操作,通过`using ...

    leetcode回型打印矩阵-100DaysOfCode:2018年10月8日开始的100天编码挑战

    leetcode回型打印矩阵100天代码 2018 年 10 月 8 日,我开始了100 Days Of Code挑战。 在这个挑战过程中,我保证编码 100 天。 这些问题将从 HackerRank 和 LeetCode 中选出。 如果所有测试用例都成功,代码将被推送...

    C++实现矩阵转置的模板类

    用C++实现矩阵转置的模板类,属于标准模板。

    PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析

    回环矩阵,又称为环形矩阵,其填充方式是从左上角开始,按照上、右、下、左的顺序逐行填充,当行满后,继续填充下一行,但方向反转,如此反复。上述代码中的`snake()`函数实际上也实现了回环矩阵,因为它的填充规则...

    python实现回旋矩阵方式(旋转矩阵)

    我们知道Python中是没有数组 这种数据结构的,所以要想实现回旋矩阵,需要先导入一个numpy包, 它是一个由多维数组对象和用于处理数组的例程集合组成的python扩充程序库,可以用来做数组算数和逻辑运算 思路: 首先...

    练习_Holcon回型针练习_

    本案例中,我们关注的焦点是名为"练习_Holcon回型针练习_"的压缩包,它包含了与Holcon回型针练习相关的学习资料。Holcon通常指的是霍尔康(Halcon)——一种广泛使用的机器视觉软件。在这里,用户可能是为了掌握霍尔...

    c语言代码方阵

    好详细的资源描述有机会获得我们的推荐,更有利于他人下载,赚取更多积分。

    三进两回型工作面错层位布置及数值模拟

    以某矿3#煤层三进两回型工作面地质条件为背景,应用错层位巷道布置采煤法对其回采巷道进行优化布置,通过对比新方法与原方法的煤炭损失率、排瓦斯容易程度、巷道掘进与维护等方面,初步得出错层位巷道布置形式在三进两...

    行业文档-设计装置-风机叶片回型检修平台智能伸缩臂装置.zip

    标题中的“行业文档-设计装置-风机叶片回型检修平台智能伸缩臂装置”表明了这是一个关于风力发电行业的技术文档,重点介绍了用于风机叶片检修的创新设备——回型检修平台与智能伸缩臂装置。这类设备是风电运维中不可...

    行业文档-设计装置-风机叶片回型检修平台智能平衡吊点装置.zip

    "风机叶片回型检修平台智能平衡吊点装置"是一种专门针对这一需求而设计的创新设备,它旨在提高检修效率,确保作业安全,同时降低运营成本。下面将详细介绍这个装置的相关知识点。 首先,我们来理解"回型检修平台"的...

    基于回型边框的二次规划布局算法

    在探讨集成电路设计中的一项关键技术——布局算法时,我们需要注意几个核心概念:布局问题、力驱动、二次线长以及回型边框模型。 首先,布局问题在集成电路设计流程中,指的是确定电路模块位置的过程。布局算法的...

    HuiXing.zip

    编译器vs2019community。...②/*算法将顺序排列的数字从外圈到内圈依次排列,生成回型数字矩阵 * * 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 */

    易语言回弯进度条

    易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语法,降低了编程的门槛,使得更多非计算机专业的人也能快速上手编程。在易语言中,“回弯进度条”是一种常见的用户界面(UI)元素,它用于展示程序执行...

Global site tag (gtag.js) - Google Analytics