C語言每日小練(二)——蛇形填數
阿新 • • 發佈:2019-02-10
例:在n*n方陣裡輸入1,2,3,...,n*n,要求填成蛇形。例如n=4時方陣為:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
上面的方陣中,多餘的空格知識為了便於觀察矩陣,不必嚴格輸出,n<=8。
解:此題需要小小地思考下:在按蛇形填充矩陣的過程中,我們注意到這個固定的過程:下、左、上、右、下、左、上、右... ...這個過程是迴圈的,也就是說我們找到了解決問題的規律~接下來只要模擬這個過程就可以了!
Code:
在填充每個方向時,判斷下一個位置是否合適(越界或已填充)~#include<stdio.h> #include<string.h> int a[10][10]; int main() { int i, j, n, count; memset(a, 0, sizeof(a)); scanf("%d", &n); count = a[i = 1][j = n] = 1;//賦初值,方向為:右->左 while(count < n*n) { while(i<n && !a[i+1][j]) a[++i][j] = ++count;//下 while(j>1 && !a[i][j-1]) a[i][--j] = ++count;//左 while(i>1 && !a[i-1][j]) a[--i][j] = ++count;//上 while(j<n && !a[i][j+1]) a[i][++j] = ++count;//右 } for(i = 1; i <= n; i++) for(j = 1; j <= n; j++) { if(j == n) printf("%3d\n", a[i][j]); else printf("%3d", a[i][j]); } return 0; }
執行結果: