【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

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