【C語言習題】輸出蛇形矩陣

題目

在這裏插入圖片描述在這裏插入圖片描述

分析

  1. 從1開始,a[n][0]=1
  2. 往右下移動
  3. 若移動到最後一行非最後一列,右一格;最後一列則上一格
  4. 左上移動
  5. 若移動到第一列非第一行,上一格;第一行則右一格
  6. 2~5步循環
#include <stdio.h>
#define SIZE 100
int main() {
    int i,j,m=0,n,N,count=2;
    int a[SIZE][SIZE]={0};
    printf("輸入N:");
    scanf("%d",&N);
    n = N-1;
    a[n][m] = 1;
        a[--n][m] = count++;  //上一格
        while (count<=N*N) {
            while(n<N-1&&m<N-1)   //行和列不在邊界
                a[++n][++m] = count++;      //右下一格
                if (n == N-1&&m != N-1)     //最後一行並且非最後一列
                    a[n][++m] = count++; //往右一格
                else                        //不管是不是最後一行,最後一列
                    a[--n][m] = count++; //上一格
            while(m>0&&n>0)     //行或列不在邊界上,左上一格
                a[--n][--m] = count++;
            if (n != 0&&m == 0)        //第一列並且非第一行
                a[--n][m] = count++;  //上一格
            else                        //不管是不是第一列,但是第一行
                a[n][++m] = count++; //右一格
        }
    for(i=0;i<N;i++) {
        for (j = 0; j < N; j++)
            printf("%d\t", a[i][j]);
        printf("\n");
    }
    return 0;
}

結果示例

輸入1
輸入1
輸入2
輸入2
輸入3
輸入3

輸入4

輸入4
輸入5

輸入5
輸入10
輸入10

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章