蛇形填数

来源:互联网 发布:卖家网数据套餐 编辑:程序博客网 时间:2024/06/07 01:30
#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,只不过变一下顺序~~~~