【一本通 2045 蛇形填数】

【题目描述】

在n×n方阵里填入1,2,3,…,n×n1,2,3,…,n×n,要求填成蛇形。例如n=4 时方阵为:

 【思路分析】

       1、先确定最右上角的位置 a[1,n], 最右上角的数字  cnt=1

                 int x=1,y=n,cnt=1;        //定义 最右上角的位置 

                 a[x][y]=cnt;      //最右上角 填写数字 1

     2、 从最右上角沿 “向下——向左——向上——向右”填数字。只要填写的数字 cnt< n*n,就不断循环这4条线路填充。

     3、  4条线路的特点

        第1条线路:从上到下。  x +1   y 不变    如果 下一个元素是否为 0  且 x+1<=n,填写数字。

       第2条线路: 从右到左 。  y-1  x 不变       如果 下一个元素是否为 0  且y-1>=1,填写数字。

        第3条线路:从下到上       x -1  y 不变        如果 下一个元素是否为 0  且x-1>=1,填写数字。

        第4条线路:从左到右       y +1  x 不变       如果 下一个元素是否为 0  且y+1<=n,填写数字

 【源代码】

        

#include<iostream>

using namespace std;

int a[21][21]={};

int main()

{

         int n;

         cin>>n;

         int x=1,y=n,cnt=1;        //定义 最右上角的位置 

         a[x][y]=cnt;      //最右上角 填写数字 1

while (cnt<n*n)

{

    //从上到下  x  +1  y 不变    测试下一个元素是否为 0  且 x+1<=n

         while( x+1<=n && a[x+1][y]==0 ){

                 x++;

                 cnt++;

                 a[x][y]=cnt;        

            }

//从右到左   y-1  x 不变

         while( y-1>=1 && a[x][y-1]==0 ){

                  y--;

                 cnt++;

                 a[x][y]=cnt;                

           }

//从下到上  x -1  y 不变 

         while( x-1>=1 && a[x-1][y]==0 ){        

                 x--;

                 cnt++;

                 a[x][y]=cnt;                

         }

//从左到右  y +1  x 不变

         while( y+1<=n && a[x][y+1]==0 ){

                 y++;

                 cnt++;

                 a[x][y]=cnt;        

         }

}

//输出矩阵 

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

{

    for (int j=1;j<=n;j++)          cout<<a[i][j]<<" ";

    cout<<endl;    //输出一行后需要换行 

}

return 0;

 【视频讲解地址】

28、二维数组的应用案例——一本通 2045 蛇形填数_哔哩哔哩_bilibili

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值