C++蛇形填充数组

这里介绍两种蛇形填充

第一种:

我们设坐标(X,Y)我们从1开始(0,n-1)然后就是下,下,下,左,左,左,上,上,上。总之每一条路径都是走到尽头;我们采用先试探再赋值的方法。

#include <iostream>
#include <iomanip>
#include <cstring>
int a[10][10];
using namespace std;
int main ()
{int n,x,y,pp;
cin>>n;
memset(a,0,sizeof(a)); //初始化数组a全为0
pp=a[x=0][y=n-1]=1; 
while (pp<n*n)
{ while (x+1<n&&a[x+1][y]==0) a[++x][y]=++pp;//先判断再下移
  while (y-1>=0&&!a[x][y-1]) a[x][--y]=++pp;//这里a[x+1][y]==0等价于!a[x][y-1]
  while (x-1>=0&&!a[x-1][y]) a[--x][y]=++pp;
  while (y+1<n&&!a[x][y+1]) a[x][++y]=++pp;
  }
  for(int i=0;i<n;i++)
  {
  for (int j=0;j<n;j++)
  cout<<setw(3)<<a[i][j];
  cout<<endl;
  }
  return 0;
  }

此解的巧妙之处在于数组初始化为0;
再介绍一下memset 函数;
memset 又叫初始化函数是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定值;头文件 <cstring>
程序中memset(a,0,sizeof(a)) 将数组a初始化为0;sizeof(a)是数组a的长度。
输入:5
输出:在这里插入图片描述

第二种蛇形填充 数组

用数字1,2,3,4,…,nn这n2个数蛇形填充规模为nn的方阵。
在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
   int n, i, j, x=1;
   int a[10][10]={0};
   cin >> n;
   for(i=0;i<=2*n-2;i++)
   {
       for(j=i;j>=0;j--)
       {
           if(j<n&i-j<n)
           {
             if(i%2!=0)
                 a[i-j][j] = x++;     //这里分两步先把数组赋值为x,再x变为x++
               else
                   a[j][i-j] = x++;
           }
       }
   }
   for(i=0;i<n;i++)
   { for(j=0;j<n;j++)
    cout<<a[i][j]<<" ";
  cout<<endl;}
 } 
  
 
     

在这里插入图片描述
在这里插入图片描述
通过判断[0][0];[1][1]; [2][2]; [3][3]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值