PTA|C語言:螺旋方陣(20分)
阿新 • • 發佈:2018-12-19
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++;
}