蓝桥杯 顺时针螺旋填入

来源:互联网 发布:淘宝手机端怎么做推广 编辑:程序博客网 时间:2024/04/30 19:51
从键盘输入一个整数(1~20)

则以该数字为矩阵的大小,把1,2,3„n*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

10   9  8   7


/* * 顺时针螺旋式填入, * 即从左往右,从上往下,从右往左,从下往上 * 假设矩阵的长度为n,循环的次数应为n/2 */import java.util.*;public class Main{public static void print(int[][] array){for(int i=0;i<array.length;i++){for(int j=0;j<array.length;j++){System.out.printf("%4d", array[i][j]);}System.out.println();}}public static void main(String[] args){Scanner s=new Scanner(System.in);int n=s.nextInt();int[][] array=new int[n][n];int startIndex=0,endIndex=n,e=0,count=1;while(e<=n/2){for(int i=startIndex;i<endIndex;i++){//给该轮的上层赋值,行数由变量e决定,依次为第0,1,2,...,n/2行array[e][i]=count++;}for(int i=startIndex+1;i<endIndex;i++){//给该轮的右侧赋值,列数由n-1-e决定,依次为第n-1,n-2,n/2列//同时,注意不要覆盖已经赋值的位置array[i][n-1-e]=count++;}for(int i=endIndex-2;i>=startIndex;i--){//给该轮的下侧赋值,行数由n-1-e决定,依次为第n-1,n-2,n/2行array[n-1-e][i]=count++;}for(int i=endIndex-2;i>=startIndex+1;i--){//给该轮的左侧赋值,列数由e决定,依次为第0,1,2,n/2列array[i][e]=count++;}//由于一轮赋值后围一圈,所以,startIndex和endIndex都需要变化startIndex++;endIndex--;//起始的行数e也需要发生变化e++;}print(array);}}



0 0
原创粉丝点击