1. 程式人生 > >PTA|C語言:螺旋方陣(20分)

PTA|C語言:螺旋方陣(20分)

7-65 螺旋方陣 (20 分)

所謂“螺旋方陣”,是指對任意給定的N,將1到N×N的數字從左上角第1個格子開始,按順時針螺旋方向順序填入N×N的方陣裡。本題要求構造這樣的螺旋方陣。

輸入格式:

輸入在一行中給出一個正整數N(<10)。

輸出格式:

輸出N×N的螺旋方陣。每行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

一開始完全沒有頭緒,然後請教班裡一位做出來這道題的同學,告訴我是先用一個大for迴圈套住,表示迴圈層數,再用四個for迴圈來順時針(向右向下向左向上)旋轉,最後算了一節課,終於實現了。程式碼如下:

#include<stdio.h>
#include<stdlib.h>
#define X 100
int main(){
   int N,m=1;
   int i,j,k,z,c;
   int a[X][X]={0};
   scanf("%d",&N);
   for(c=0;c<=N/2+1;c++){
        for(i=c;i<=N-c-1;i++){
            a[c][i]=m++;
        }
        for(j=c+1;j<N-c;j++){
           a[j][N-c-1]=m++;
        }
        for(k=N-c-2;k>=c;k--){
            a[N-c-1][k]=m++;
        }
        for(z=N-c-2;z>=c+1;z--){
            a[z][c]=m++;
        }
   }
   for(i=0;i<N;i++){
    for(j=0;j<N;j++){
        printf("%3d",a[i][j]);
    }
    printf("\n");
   }

}

 注意大for迴圈裡的第三和第四個迴圈,我一開始因為不夠仔細,而使多列印了左下角的數導致結果有些問題。。。如下圖。。這兩種迴圈的話for裡面條件判斷應該是不同的

上面的程式碼用的是第二張圖的迴圈方式,若用上面的那一張圖的迴圈方式的話,第三個第四個迴圈就應該寫成:

for(k=N-c-2;k>=c+1;k--){
     a[N-c-1][k]=m++;
   }
for(z=N-c-1;z>=c+1;z--){
     a[z][c]=m++;
   }