题解 | #蛇形矩阵#

蛇形矩阵

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

#include<stdio.h>//虽然比较麻烦但算是一种全新的思路
int main()//因为比较懒就不想截图了,我是根据每一条斜边来储存的,根据i变化的规律对应斜边坐标变化的规律进行储存,i每加一对应着一条斜边
{
    int n=0;
    scanf("%d",&n);
    int i,j=0;//整个函数的核心,就是横纵坐标的‘和’,当a=b=0时,i等于0;当a=0,b=1||a=1,b=0时,i等于1,以此类推.....
    int arr[50][50];
    int count=1;
    int flag=1;//相当于下半部分后a,b的“边界”
    for(i=0;i<=2*n-1;i++)
 {   
        int a,b=0;
        
     if(i<n)//上半部分
    {
        if(i==0)arr[0][0]=count;//赋予坐标起点
        else if(i%2!=0)
        {
         a=0;   
         b=i;
         while(b>=0)
         {
          arr[a][b]=++count;   
          a++;
          b--;
         }
        }//为奇数时
        else 
        {
         a=i;
         b=0; 
         while(a>=0)
         {
           arr[a][b]=++count;  
           a--;
           b++;
         }
        }//为偶数时
    }
        
        
        
    else //下半部分
    {
     if(i==(2*n-1)){arr[n-1][n-1]=count;}//赋予坐标终点
     else if(i%2!=0)
     {
       a=flag;  
       b=i-flag;
       while(b>=flag)
       {
         arr[a][b]=++count;   
         a++;
         b--;
       }
       flag++;  
     } //为奇数时
      else
      {
       b=flag;
       a=i-flag;
       while(a>=flag)
       {
         arr[a][b]=++count;
         a--;
         b++;
       }
       flag++;   
      }//为偶数时
    }
   
        
}
  //打印最终结果  
 for(i=0;i<n;i++)
 {
    for(j=0;j<n;j++)
    {
      printf("%d ",arr[i][j]);
    }
    printf("\n");
 }
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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