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

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、代码:与上一相比只是交换了一下位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值