欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java语言实现螺旋方阵

程序员文章站 2022-07-03 11:51:06
螺旋方阵输入行数,输出其的螺旋方阵,其中所有数间隔至少为两个空格。比如:请输入行数(整数)512345161718196152425...

螺旋方阵

输入行数,输出其的螺旋方阵,其中所有数间隔至少为两个空格。比如:

请输入行数(整数)5
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

import java.util.Scanner;

public class TestOne{
	public static void main(String [] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入行数(整数)");
		int n = sc.nextInt();
		int m = n+2;
		int [][] arr = new int[m][m];   // 同步 book
		
		// 标记 1 可以落脚,0 不可以落脚
		int [][] book = new int[m][m];  // 为了标记四周, 数组开大一点
		for(int i = 0;i < m;i++) 
			if(i == 0 || i == m-1) 
				for(int j = 0;j < m;j++) {
					book[i][j] = 1;
					book[j][i] = 1;
				}
		
		// 添加数字
		int [][] direction = {{0, 1}, {-1, 0}, {0, -1}, {1, 0}};    // 方向(右,下,左,上)
		int i = 1, j = 0, dir = 0, value = 0;       // dir是方向 0123对应右,下,左,上,从 arr[1][0] 起,先向右一步 value 是值
		while(value < n*n) {
			// 判断下一步能不能落脚(期初是右边)
			if(book[i+direction[dir%4][0]][j+direction[dir%4][1]] == 0) { // 可以落脚
				i += direction[dir%4][0];    
				j += direction[dir%4][1];
				arr[i][j] = ++value;
				book[i][j] = 1;          // 走过了,不能再落脚了
			} else   // 不能落脚,则顺时针换方向
				dir++;
		}
		
		//输出
		Integer maxnumber = new Integer(arr[n/2+1][n/2+1]);
		int length = maxnumber.toString().length() + 2;       // 保证所有数间隔至少为两个空格
		for(i = 1;i < m-1;i++) {
			for(j = 1;j < m-1;j++) 
				System.out.printf("%"+length+"d", arr[i][j]);
			System.out.println();
		}
		
		sc.close();
	}

}
/* Code Running Results:
 * 请输入行数(整数)11
 *   1    2    3    4    5    6    7    8    9   10   11
 *  40   41   42   43   44   45   46   47   48   49   12
 *  39   72   73   74   75   76   77   78   79   50   13
 *  38   71   96   97   98   99  100  101   80   51   14
 *  37   70   95  112  113  114  115  102   81   52   15
 *  36   69   94  111  120  121  116  103   82   53   16
 *  35   68   93  110  119  118  117  104   83   54   17
 *  34   67   92  109  108  107  106  105   84   55   18
 *  33   66   91   90   89   88   87   86   85   56   19
 *  32   65   64   63   62   61   60   59   58   57   20
 *  31   30   29   28   27   26   25   24   23   22   21
 */






本文地址:https://blog.csdn.net/qq_45772965/article/details/109276249

相关标签: 基础算法 java