3-3例题-蛇形填数c/c++语言

蛇形填数,在n*n方阵里填入1,2,。。。n*n,要求填成蛇形。例如,n=4时方阵为:
10  11  12  1
9    16  13  2
8    15  14  3
7    6     5   4
上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出
分析:
    类比数学中的矩阵,可以用一个二维数组来储存题目中的方阵。只需要声明一个“int a[maxn][maxn];”,就可以获得一个大小为maxn*maxn的方阵。在声明时,二维的大小比不相同,因此也可以声明int a[30][50]这样的数组。第一维下标范围是0,1,2,。。。,29.第二维下标范围是0,1,2,。。。,49。

    从1开始依次填写。设“笔”的坐标为(x,y),则一开始x=0,y=n-1,即第0行,第n-1列(行列的范围是0~n-1,没有第n列)。“笔”的移动轨迹是:下,下,下,左,左,左,上,上,上,右,右,下,下,左,上。总之,先是下,到不能填为止,然后是左,接着是上,最后是右。“不能填”是指再走就出界,或者再走就要走到以前填过的格子。如果把所有格子初始化为0,就能很方便地加以判断。
#include<cstdio>#include<string.h>
#define maxn 20
int a[maxn][maxn];
using namespace std;
int main()
{
    int x,y,tot=0,n;
    scanf("%d",&n);
   memset(a,0,sizeof(a)); 
    tot=1; 
    a[0][n-1]=1;
   x=0; 
    y=n-1;//if n=4 a[0][3]=1 
    while(tot<n*n) 
    {
        while(x+1<n&&!a[x+1][y])a[++x][y]=++tot; 
         while(y-1>=0&&!a[x][y-1])a[x][--y]=++tot;
         while(x-1>=0&&!a[x-1][y])a[--x][y]=++tot; 
         while(y+1<n&&!a[x][y+1])a[x][++y]=++tot;
   }
for(x=0;x<n;x++)
{ 
for(y=0;y<n;y++) 
{
printf("%3d",a[x][y]); 
}
printf("\n"); 
} 
return 0;
}



 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值