题解 | 蛇形矩阵

蛇形矩阵

https://www.nowcoder.com/practice/f228a074c5274619b26be544962375e1

#include <stdio.h>

int main() {
    int n = 0;
    scanf("%d", &n);
    int matrix[n][n];
    int num = 1;
    int flag = 1; //flag=1表示向右上运动,flag=-1表示向左下运动
    int x = 0; //表示此刻位置的行下标
    int y = 0; //表示此刻位置的列下标

    while (num <= n * n)
    {
        if (1 == flag) //向右上方运动
        {
            while (x >= 0 && y <= n-1) //没有越过上边界和右边界
            {
                matrix[x][y] = num;
                ++num;
                --x; 
                ++y; //继续向右上运动
            }
            
            if (x < 0 && y <= n-1) //越过上边界但是没有越过右边界
            {
                ++x;
                --y; //向左下方回退一格
                ++y; //改为向正右方移动一格
                flag = -1; //改变运动方向
            }
            else // 越过右边界
            {
                ++x;
                --y; //向左下方回退一格
                ++x; //改为向正下方移动一格
                flag = -1; //改变运动方向
            }
        }
        else //向左下运动
        {
            while (x <= n-1 && y >= 0 ) //没有越过下边界和左边界
            {
                matrix[x][y] = num;
                ++num;
                ++x; 
                --y; //继续向左下运动
            }

            if (x <= n-1 && y < 0) // 越过左边界但是没有越过下边界
            {
                --x;
                ++y; //向右上方回退一格
                ++x; //改为向正下方移动一格
                flag = 1; //改变运动方向
            }
            else //越过下边界
            {
                --x;
                ++y; //向右上方回退一格
                ++y; //改为向正右方移动一格
                flag = 1; //改变运动方向
            }
        }
    }

    for (int i=0; i<n; ++i)
    {
        for (int j=0; j<n; ++j)
        {
            printf("%d ", matrix[i][j]);
        }
        
        printf("\n");
    }
    
    return 0;
}

全部评论

相关推荐

码农索隆:7*24,随时待命,这是去🇷🇺打仗去了啊
点赞 评论 收藏
分享
每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务