《蛇形矩阵》题解

蛇形矩阵

http://www.nowcoder.com/questionTerminal/f228a074c5274619b26be544962375e1

首先分为2n-1次循环。每次循环会写入整个斜边的数字。斜边的方向有左下,右上。当循环次数k<=n时,当k为单数时,方向为右上,当k为双数时,方向为左下。当循环次数n<k<2*n-1时,当k为单数时,方向为右上,当k为双数时,方向为左下。

#include <stdio.h>
int main()
    {
        int n;
        scanf("%d",&n);
        int a[n][n];
        int i,k,j;
        int x=1;
        for(k=1;k<=2*n-1;k++)                //总共有7个斜边
           {
            if(k<=n)                        //前4个斜边
            {
                if(k%2==0)                            //如果斜边是双数次
                    {
                    for(i=0,j=k-1;j>=0;i++,j--)            //初始位置是a[0][k-1],由于是向左下移动,j碰壁的时候循环结束
                            a[i][j]=x++;

                    }
                else                                     //如果斜边是单数次
                    {
                        for(i=k-1,j=0;i>=0;j++,i--)    //初始位置是a[k-1][0],由于是向右上移动,i碰壁的时候循环结束
                            a[i][j]=x++;
                    }
            }

        else                             //后三个斜边
            {
                if(k%2==0)
                    {
                        for(i=k-n,j=n-1;i<n;j--,i++)            //初试位置a[k-n][n-1],由于向左下移动,i碰壁的时候停止循环
                            a[i][j]=x++;

                    }
                else 
                       { for(i=n-1,j=k-n;j<n;i--,j++)    //初始位置a[n-1][k-n],由于向右上移动,j碰壁的时候停止循环
                            a[i][j]=x++;}
            }
    }
for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    }
全部评论
这种方式好理解些
1 回复 分享
发布于 2023-10-14 21:31 重庆

相关推荐

点赞 评论 收藏
分享
Beeee0927:正确的建议
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务