蛇形填数

来源:互联网 发布:陌陌辅助软件 编辑:程序博客网 时间:2024/06/05 03:07

题目大家应该很清楚,这里我就不黏题了、
样例输入:

4

样例输出:

 10 11 12  1  9 16 13  2  8 15 14  3  7  6  5  4

大概的思想就是 按照他的顺序依次循环在数组中填数,最后在把数组输出,输出格式自己改。
代码:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define maxn 40int a[maxn][maxn];int main(){    int i,j,x,y,n,tot;    scanf("%d",&n);    memset(a,0,sizeof(a));//将数组中所有的元素都置0;    tot=a[x=0][y=n-1]=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(i=0;i<n;i++)    {        for(j=0;j<n;j++)        {            printf("%3d",a[i][j]);        }        printf("\n");    }    return 0;}
原创粉丝点击