软件编程
位置:首页>> 软件编程>> java编程>> Java实现顺时针输出螺旋二维数组的方法示例

Java实现顺时针输出螺旋二维数组的方法示例

作者:LeBron_Six  发布时间:2022-02-03 00:11:41 

标签: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实现顺时针输出螺旋二维数组的方法示例

来源:http://blog.csdn.net/yyh352091626/article/details/52238931

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com