思路:将数据按上图颜色进行区分,分为多层,分别进行打印。记可以看出当层数为奇数时,逆时针打印,层数为偶数时,顺时针打印。
public class Q1 { public static void main(String []args){ Scanner sc = new Scanner(System.in); int n=sc.nextInt(); int arr[][]= new int[n][n]; arr[0][0]=1; int i=0,j=1; int num=2; int step=1; while(step<n){ //层数为偶数,从第二层开始打印 while(i<=step){ arr[i][j]=num; num++; i++; } i--; j--; while(j>=0){ arr[i][j]=num++; j--; } j=0; i++; step++; if(step==n) break; //必须对最大层数加以验证,避免后续操作导致数组越界 //层数为奇数 while(j<=step){ arr[i][j]=num; num++; j++; } j--; i--; while(i>=0){ arr[i][j]=num; num++; i--; } i=0; j++; step++; } //打印数组 for(int ii=0;ii<n;ii++){ for(int jj=0;jj<n;jj++){ System.out.PRint(arr[ii][jj]+" "); } System.out.println(); } }}题目二: 当n=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思路:一圈一圈的打印,当n为奇数时,打印圈数是n/2+1,当n为偶数时,打印圈数是n/2
public class first { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int arr[][]=new int[n][n]; //int is=n,js=n; int i=0,j=0; int num=1,step=0; for(int times=((n&1)==1?n/2+1:n/2);times>=0;times--){ //利用n&1来判断n的奇偶性 while(j<n-step){ arr[i][j]=num++; //num++; j++; } j--; i++; while(i<n-step){ arr[i][j]=num; num++; i++; } i--; j--; while(j>=step){ arr[i][j]=num; num++; j--; } j++; i--; while(i>=step+1){ arr[i][j]=num; num++; i--; } i++; j++; step++;//控制打印的圈数 } //打印数组 for(int ii=0;ii<n;ii++){ for(int jj=0;jj<n;jj++){ System.out.print(arr[ii][jj]+" "); } System.out.println(); } }}总结:螺旋数组的核心思路就是找出规律,通过控制i,j的变换来有规律的填充数组。
新闻热点
疑难解答