1. 程式人生 > >C語言每日小練(二)——蛇形填數

C語言每日小練(二)——蛇形填數

例:在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;
}
在填充每個方向時,判斷下一個位置是否合適(越界或已填充)~

執行結果: