题解 | #蛇形矩阵#

蛇形矩阵

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

我称之为史上最简洁易懂方式,先看下面图形,图一是效果图,图二是我们分析的图,

我们通过分析,可以看出先打印第二张图是简单一点,通过补齐的方式行成一个三角形

这个三角形的行数通过观察发现是我们输入的行2倍-1 也就是2n-1 解决了循环的范围接着解决填充数字的条件。

当 行>=1 的时候我们需要填充数字,反之不填充,但我们每填充一次行减少1列增加1, n是我们输入的行,

#include<stdio.h>
int main()
{
    int n, arr[100][100] = { 0 };
    scanf("%d", &n);
    int count = 1;
    for (int i = 1; i <= 2 * n - 1; i++)
    {
        int col = 1, row = i;//行和列从1开始,这里有伏笔,后面会讲到,
        while (row >= 1)
        {
            arr[row][col] = count++;
            row--, col++;
        }
    }
    for (int i = 1; i <= 2*n-1; i++)
    {
        for (int j = 1; j <= 2*n-1; j++)
            printf("%d ",arr[i][j]);
        printf("\n");
    }
        return 0;
}

这是我们已经有了雏形,三角形是可以的了,只不过分析图中的填充背景部分是不需要数字的,所以加一个条件,

在之前的 n>=1 填充里面加入条件:当行和列都<=n时候可以填充,其他不填充,这里提供一下条件代码,其他一致。

while (row >= 1)
{
    if (row <= n && col <= n)
        arr[row][col] = count++;
    row--, col++;
}

已经实现了我们最上面的分析图,但是和目标图还是不一样。我们现在实现全部的是从左下往右上的方式打印的

这里就使用到了前面的伏笔行和列从1开始的设定,通过观察我们发现基数行不用改变,偶数行是从右上往左下的

而偶数行的下标实际上就是我们现在所处的位置下标对换。比如我们输入数字2的位置是 row=2 col=1 但实际我们要输出的是数字3 且 row=1 col =2 所以我们不难看出就是偶数行 则改变 row 和col 的位置,

while (row >= 1)
{
    if (row <= n && col <= n)
    {
        if (i % 2 != 0)//基数行不变继续填充,
            arr[row][col] = count++;
        else//偶数行将行和列换位置,
            arr[col][row] = count++;
    }
    row--, col++;//每次填充完都行
}

效果已经出现了,

控制一下输出的行和列,让遍历到输入的n就好了,

如果看的不舒服可以稍加改动。

下面是完整代码。

#include<stdio.h>
int main()
{
    int n,arr[100][100];
    scanf("%d",&n);
    int count=1;
    for(int i=1;i<=2*n-1;i++)
    {
        int col=1,row=i;
        while(row>=1)
        {
            if(col<=n&&row<=n)
            {
                if(i%2!=0)
                    arr[row][col]=count++;
                else
                    arr[col][row]=count++;
            }
                
            row--,col++;
        }
    }

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

全部评论

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务