1. 程式人生 > >如何用C語言進行蛇形陣列填空

如何用C語言進行蛇形陣列填空

#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

題目並不是很難,最重要的是此題的思維方式值得借鑑!通過對界的控制從而實現每次賦值不重複不多餘!