
思路:將數據按上圖顏色進行區分,分為多層,分別進行打印。記可以看出當層數為奇數時,逆時針打印,層數為偶數時,順時針打印。
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.題目二: 當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的變換來有規律的填充數組。
新聞熱點
疑難解答