蛇形方阵详细分析【经典之得一看哈】

本文介绍了几种使用C语言实现的不同矩阵填充方式,包括简单的斜向填充、基于奇偶行变化的斜向填充以及上下三角的综合填充等。通过具体代码示例展示了不同逻辑对填充方向的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.#include<stdio.h>

void main()

{

       int i,j,a[100][100],n,k;

       printf("请输入列数n= ");

       scanf("%d",&n);

       k=1;

       for(i=1;i<=n;i++)

              for(j=1;j<=i;j++) //每一层输入 i 个元素,故j<=i.

              {

              a[i+1-j][j] = k; //在内循环,并且与j有关。

//i层的第一个数的横坐标为i+1-j,然后随着j++而横坐标渐渐斜上输入,

                        //数组第二个下标以 j 作为基值,随着j++纵坐标向右延伸。

                     k++;

              }

              for(i=1;i<=n;i++)

              {

                     printf("\n");

                     for(j=1;j<=n+1-i;j++) //每一行输出 n+1-i 个元素

                            printf("%4d",a[i][j]);

              }

       printf("\n");

}

2 代码:与上一个程序相比只仅仅改变了:a[i+1-j][j] > a[j][i+1-j].

#include<stdio.h>

void main()

{

       int i,j,a[100][100],n,k;

       printf("请输入列数n= "); 

  scanf("%d",&n);

k=1;

       for(i=1;i<=n;i++)

              for(j=1;j<=i;j++)

              {

                     if(i%2==0)   a[i+1-j][j]=k;

                  else         a[j][i+1-j]=k;           

                     k++;

              }

              for(i=1;i<=n;i++)

              {

                     printf("\n");

                     for(j=1;j<=n+1-i;j++)

                  printf("%4d",a[i][j]);

              } 

     printf("\n"); 

 }

 

5、代码:

#include<stdio.h>

void main()

{

       int i,j,a[100][100],n,k;

       printf("请输入列数n= ");

       scanf("%d",&n);

       k=1;

//输出上三角

       for(i=1;i<=n;i++)

              for(j=1;j<=i;j++)

              {

                     if(i%2==0)  a[i+1-j][j]=k;

                  else        a[j][i+1-j]=k;          

                     k++;

              }

//输出下三角

     for(i=n+1;i<2*n;i++)

               for(j=1;j<=2*n-i;j++)

          {

                     if(i%2==0)  a[n+1-j][i-n+j]=k;   //n+1在这里是定值了

                  else        a[i-n+j][n+1-j]=k;       

                     k++;

              }

 

              for(i=1;i<=n;i++)

              {

                     printf("\n");

                     for(j=1;j<=n;j++)

                            printf("%4d",a[i][j]);

              }

       printf("\n");

}

 

 

6、代码:只是把上面5代码中两个地方交换位置

#include<stdio.h>

void main()

{

       int i,j,a[100][100],n,k;

       printf("请输入列数n= ");

       scanf("%d",&n);

       k=1;

       for(i=1;i<=n;i++)

              for(j=1;j<=i;j++)

              {

                     if(i%2==0)  a[j][i+1-j]=k;

                  else        a[i+1-j][j]=k;         

                     k++;

              }

     for(i=n+1;i<2*n;i++)

               for(j=1;j<=2*n-i;j++)

          {

                     if(i%2==0)   a[i-n+j][n+1-j]=k;

                  else         a[n+1-j][i-n+j]=k;      

                     k++;

              }

              for(i=1;i<=n;i++)

              {

                     printf("\n");

                     for(j=1;j<=n;j++)

                     printf("%4d",a[i][j]);

              }

       printf("\n");

}

 

 

 

 

 

 

 

 

#include<stdio.h>

void main()

{

       int i,j,a[100][100],n,k;

       printf("请输入列数n= ");

       scanf("%d",&n);

       k=1;

       for(i=1;i<=n;i++)

              for(j=1;j<=i;j++)          

{

                     a[j][i+1-j]=k;        

       k++;

              }

              for(i=1;i<=n;i++)

              {

                     printf("\n");

                     for(j=1;j<=n+1-i;j++) //每一行输出 n+1-i 个元素

                            printf("%4d",a[i][j]);

              }

       printf("\n");

}

3、代码:与上一个相比加了一个奇偶数层的if判断,这正好就是“拐点”的关键!

#include<stdio.h>

void main()

{

       int i,j,a[100][100],n,k;

       printf("请输入列数n= ");

       scanf("%d",&n);

       k=1;

       for(i=1;i<=n;i++)

              for(j=1;j<=i;j++)

              {

                     if(i%2==0)  a[j][i+1-j]=k;

                  else        a[i+1-j][j]=k;          

                     k++;

              }

              for(i=1;i<=n;i++)

              {

                     printf("\n");

                     for(j=1;j<=n+1-i;j++)

                            printf("%4d",a[i][j]);

              }

       printf("\n");

}

 

 

 

4、代码:与上一相比只是交换了一下位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值