题解 | 蛇形矩阵

蛇形矩阵

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

//1.将矩阵的移动方式分为两种,右和右上、下和左下,用一个整型变量来代表矩阵移动方式的改变,1代表右和右上,2代表下和左下
//2.将矩阵的移动情况分为两种,在边界上移动和在边界内部移动,因为边界有一行或一列是固定不变的,利用6个if语句对移动情况进行判断
#include <stdio.h>        //标准输入输出函数头文件
int main()
{
    int n;               //定义整型变量,保存用户输入的数字
    //输入
    scanf("%d",&n);
    int a[1000][1000];    //定义二维数组,保存目标矩阵
    int i=0,j=0;          //定义整型变量,控制矩阵的赋值
    a[i][j]=1;
    int pos=1;        //定义整型变量,表示矩阵的移动方向
    int k=1;           //定义整型变量,便于给矩阵赋值
    //利用while循环控制目标矩阵的赋值
    while(k<=n*n)
    {
        //当移动到上边界时
        if(i==0&&j<n-1&&pos==1)
        {
            a[i][++j]=++k;
            pos=2;
        }
        //当移动到左边界
        else if(j==0&&i<n-1&&pos==2)
        {
            a[++i][j]=++k;
            pos=1;
        }
        //当移动到右边界
        else if(j==n-1&&pos==1)
        {
            a[++i][j]=++k;
            pos=2;
        }
        //当移动到下边界
        else if(i==n-1&&pos==2)
        {
            a[i][++j]=++k;
            pos=1;
        }
        //当在边界内移动
        else if(pos==1)
        {
            a[--i][++j]=++k;
        } 
        else if(pos==2)
        {
            a[++i][--j]=++k;
        }
    }
    //输出
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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