蛇形矩阵的两种解法

蛇形矩阵到底难在哪里

 

复杂的分类讨论!!

下面两种方法巧妙地解决了分类讨论太复杂的问题

感谢提供这种方法思路的小伙伴的支持


第一种方法

#include<stdio.h>
int main()
{ int n,i=0,j=0,cnt=0,a[100][100],k=2;
 scanf("%d",&n);
 a[0][n-1]=1,a[0][n-2]=2;
 j=n-2;             //从2开始,可以避免后面在判断循环终止时的一系列麻烦 
 while(i!=n-1||j!=0){    //只要不是最后一个数,就开始循环 
  if(cnt==0){   
   do{
    a[++i][++j]=++k;               
   }while(i!=n-1&&j!=n-1); //没有到达边框都可以斜向下加一 
   cnt=!cnt;                        
  }
  else {  
   do{
    a[--i][--j]=++k;
   }while(i!=0&&j!=0);    //没有到达边框都可以斜向上加一 
   cnt=!cnt;
  }
   if((i==0||i==n-1) && j>0) a[i][--j]=++k;  //进行边框的赋值            
   else if((j==0||j==n-1) && i<n-1)  a[++i][j]=++k;//进行边框的赋值   
  }
  for(i=0;i<n;i++){
   for(j=0;j<n;j++)
   printf("%4d%c",a[i][j],j==n-1?'\n':' ');//右对齐输出 
 }
 return 0;
}

第二种方法

#include<stdio.h>

int main()
{
 int i,j,a[100][100],n,k=1;
 scanf("%d",&n);          //输出上三角 
 for(i=0; i<n; i++)       //先按照一般的数组顺序对数组进行赋值 
 for(j=0; j<=i; j++)
 {
  if(i%2==0) a[i-j][j]=k++;//偶数行,往上加一 (注意数组下标的设计) 
  else a[j][i-j]=k++;      //奇数行,往下加一 (注意数组下标的设计) 
 }
 for(i=n; i<2*n; i++)       //输出下三角  (注意数组下标的设计) 
 for(j=1; j<2*n-i; j++)
 {
  if(i%2==0) a[n-j][i-n+j]=k++;//同理 
  else a[i-n+j][n-j]=k++;//同理 
 }
 for(i=0; i<n; i++)
 {
  for(j=n-1;j>=0;j--)  printf("%4d%c",a[i][j],j==0?'\n':' ');//此时按照正确的顺序进行蛇形矩阵的输出 
 }
 return 0;
}

运行结果

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值