【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

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值