每日一题——回形数格式方阵

461 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
大家好,我是洋哥。今天给大家带来的是每日一题——回形数格式方阵。

题目要求

回形数格式方阵的实现

从键盘输入一个整数(1-20)则以该数字为矩阵的大小,把1,2,3…n的数字按照顺时针螺旋的形式填入其中。例如:输入数字2,则程序输出:

1 2 

4 3 

输入数字3,则程序输出:

1 2 3 

8 9 4 

7 6 5 

输入数字4, 则程序输出: 

1   2   3   4 

12  13  14  5 

11  16  15  6 

请写出n=7时的回形数格式方阵。

 

建议用时:15-20分钟

难度:较难

 

 

知识点分析

这道题主要考察的是Java的数组部分知识。以及前面所学知识的综合应用,有一定的难度。

 

 

问题分析

第一,这道题目方法也不唯一,我仅提供一些思路和想法,具体的参考代码。这道题降低了难度,它限定了n=7,如果没有指定n,又该怎么去处理呢?大家可以想一想。

第二,就这道题而言,有一个蠢办法就是一一赋值即可,他有没有要求一定要用什么方法,这是一个矩阵肯定会用到二维数组,只要将数字与数组相应的位置对应上即可。

第三,有没有巧妙一点的方法呢。有,就是找到数组下标和数字间的关系,或者用表达式来建立两者的联系,具体的见下面的代码,看完你应该就明白了。

 

 

相关知识点复习

这道题我也不是弄得很清楚,我只能体会其中的意义,但是我却说不出来,没有掌握透彻,等以后弄透彻了在更新一下。

 

我也在网上搜了一下这道题,很多都反映有点难理解,这道的确有难度,根据网上的建议,要复习两点:

第一,就是程序流程控制的知识,尤其是其中的逻辑结构。

第二,数组的知识,尤其是二维数组的运用。

 

 

代码实现

class RectangleTest1 {
 
public static void main(String[] args) {
    int n = 7;
    int[][] arr = new int[n][n];
     
    int count = 0; // 要显示的数据
    int maxX = n - 1; // x轴的最大下标
    int maxY = n - 1; // Y轴的最大下标
    int minX = 0; // x轴的最小下标
    int minY = 0; // Y轴的最小下标
    while (minX <= maxX) {
    for (int x = minX; x <= maxX; x++) {
      arr[minY][x] = ++count;
    }
    minY++;
    for (int y = minY; y <= maxY; y++) {
      arr[y][maxX] = ++count;
    }
    maxX--;
    for (int x = maxX; x >= minX; x--) {
      arr[maxY][x] = ++count;
    }
    maxY--;
    for (int y = maxY; y >= minY; y--) {
      arr[y][minX] = ++count;
    }
    minX++;
    }
     
    for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr.length; j++) {
      String space = (arr[i][j] + "").length() == 1 ? "0" : "";
      System.out.print(space + arr[i][j] + " ");
    }
    System.out.println();
    }
    }
}

 

总结和建议

当我们遇到难题时,不要退缩,不要放弃。虽然你可能受到挫败,但是这就是成长,我们遇到难题要抱有积极的形态,能理解多少理解多少,剩下的先放着,等回头再看看,说不定就有意外收获。