题目来源:
数组-13. 螺旋方阵(20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
所谓“螺旋方阵”,是指对任意给定的N,将1到N*N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入NxN的方阵里。本题要求构造这样的螺旋方阵。
输入格式:
输入在一行中给出一个正整数N(<10)。
输出格式:
输出NxN的螺旋方阵。每行N个数字,每个数字占3位。
输入样例: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.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
//正整数 N
int n = scanner.nextInt();
int[][] arr = new int[n][n];
fill(arr,0,arr.length,1);
printArr(arr);
}
public static void fill(int[][] arr,int start,int end,int count)
{
if(start>end)
return ;
else
{
//第一行的 左边到右边
for(int i=start;i<end;i++)
{
arr[start][i]=count++;
}
//最后一列的上边到下边
for(int i=start+1;i<end;i++)
{
arr[i][end-1]=count++;
}
//最后一行的右边到左边
for(int i=end-2;i>=start;--i)
{
arr[end-1][i]=count++;
}
//第一列的下面到上面
for(int i=end-2;i>=start+1;--i)
{
arr[i][start]=count++;
}
fill(arr,start+1,end-1,count);
}
}
public static void printArr(int[][] arr)
{
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr.length;j++)
{
System.out.printf("%3d",arr[i][j]);
}
// 换行
System.out.println("");
}
}
}