C语言蛇形矩阵

文章目录

  • 每日一言
  • 题目
  • 解题思路
  • 全部代码
  • 结语

每日一言

山有榛,隰有苓。云谁之思?西方美人。 --邶风·简兮


题目

C语言蛇形矩阵_第1张图片

解题思路

话不多说,直接看图
C语言蛇形矩阵_第2张图片

通过观察图表,我想到了这种方法:
我将数字放置的位置分为两大类:向右走和向左走
每大类里又分为3小类:

  1. 向左走:(1)能往左下往左下(2)左下不行向下移(3)下移不行向右移
  2. 向右走:(1)能往右上往右上(2)右上不行向右移(3)右移不行向下移

知道思路代码就很好写了

全部代码

#include 

int main() 
{
    int n=0;
    scanf("%d",&n);
    int arr[n][n];
    int i=0,j=0,k=0;
    int f=0;//判断移动方向,0右,1左
    arr[0][0]=1;
    
    for(k=1;k<n*n;k++)
    {
        if(f)//左
        {
            if(i+1<n&&j-1>=0)//左下合理
            {
                arr[i+1][j-1]=arr[i][j]+1;
                i++;
                j--;
            }
            else //左下不合理
            {
                if(i+1<n)//下移合理
                {
                    arr[i+1][j]=arr[i][j]+1;
                    i++;
                }
                else //下移不行,向右移
                {
                    arr[i][j+1]=arr[i][j]+1;
                    j++;
                }
                    f=0;
            }
        }
        else //右
        {
            if(i-1>=0&&j+1<n)//右上合理
            {
                arr[i-1][j+1]=arr[i][j]+1;
                i--;
                j++;
            }
            else//右上不合理
            {
                if(j+1<n)//右移合理
                {
                    arr[i][j+1]=arr[i][j]+1;
                    j++;
                }
                else //右移不行,向下移
                {
                    arr[i+1][j]=arr[i][j]+1;
                    i++;
                }
                    f=1;
            }
        }
    }

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

结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


你可能感兴趣的:(C语言,牛客网刷题,c语言,矩阵,算法)