如何用C語言進行蛇形陣列填空
阿新 • • 發佈:2018-11-10
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int a[20][20]; int n,i = 0; memset(a,0,sizeof(a)); //通過memset函式實現對陣列內的元素作統一的處理! scanf("%d",&n); int number = 1; int x = 0,y = n-1; a[x][y] = 1; while (number < n*n) //最大的數就是n*n { while (x < n-1 && !a[x+1][y]) a[++x][y] = ++number;/*防止越界,而且不用考慮是否超過了陣列定義的範圍,因為有x < n-1這一判斷!*/ while (y-1 >= 0 && !a[x][y-1]) a[x][--y] = ++number; while (x-1 >= 0 && !a[x-1][y]) a[--x][y] = ++number; while (y+1 < n && !a[x][y+1]) a[x][++y] = ++number; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%3d",a[i][j]); } printf("\n"); } return 0; }
輸出結果:
6
16 17 18 19 20 1
15 30 31 32 21 2
14 29 36 33 22 3
13 28 35 34 23 4
12 27 26 25 24 5
11 10 9 8 7 6
題目並不是很難,最重要的是此題的思維方式值得借鑑!通過對界的控制從而實現每次賦值不重複不多餘!