蛇形填数

#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
int main()
{
    int n,i,j;
    scanf("%d",&n);
    int p[20][20];
    memset(p,0,sizeof(p));
   // int **p=(int *)malloc(sizeof(int)*n);
   /* for(i=0;i<n;i++)
    {
        p[i]=(int *)malloc(sizeof(int)*n);
    }
      for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            p[i][j]=0;
        }
    }*/
    int t=1,x=0,y=0;

    p[0][0]=1;
    while(t<n*n)
    {
        while(y+1<n&&!p[x][y+1])p[x][++y]=++t;//x=0;y=4
        while(x+1<n&&!p[x+1][y])p[++x][y]=++t;//x=4//y=4
        while(y-1>=0&&!p[x][y-1])p[x][--y]=++t;//x=4,y=0;
        while(x-1>0&&!p[x-1][y])p[--x][y]=++t;
    }
  //  int m=1;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%5d   ",p[i][j]);
            if(j==n-1)
            {
                printf("\n");
            }
        }
    }





    return 0;
}

首先得定义足够大的数组——控制输出即可(n来控制输出的数组大小)

把大数组全部赋值为零——作为判断依据2!p【x】【y】

然后控制边界(0<x<n,以0<y<n,)

while内之所以是y+1<n而不是y<n是因为控制循环结束后y的值正好为n-1(即为输出的边界值)方便下一次的判断

注意好两个while中的判断,无论蛇的头在哪,都可以用这四个循环jiejue,只不过变一下顺序~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值