C语言 蛇形填数 求指导释

C语言 码拜 8年前 (2016-01-30) 979次浏览
这个代码看不懂哎,while里的顺序是下左上右,例如n=4,这样的话a[0][2]=4 可是输出时候a[0][2]的位置是12,这是为什么啊,输出是什么意思?
#include<stdio.h>
#include<string.h>
#define maxn 10
int a[maxn][maxn];
int main()
{
int n,x,y,tot=0;
scanf(“%d”,&n);
memset(a,0,sizeof(a));
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(x=0;x<n;x++)
{
for(y=0;y<n;y++)
printf(“%6d”,a[x][y]);
printf(“\n”);
}
return 0;
}

解决方案:10分
首先当n = 4的时候a[0][2]不等于4 等于8
其次这个程序的填充顺序也不是你理解的那样,他是从右上角开始按照顺时针旋转填充的
解决方案:10分
仅供参考:

#include <stdio.h>
#define MAXN 100
int m[MAXN+2][MAXN+2];
char d;
int x,y,k,n,w;
char str[10];
void main() {
    while (1) {
        printf("Input n(1..%d):",MAXN);
        fflush(stdout);
        rewind(stdin);
        if (1==scanf("%d",&n)) {
            if (1<=n && n<=MAXN) break;
        }
    }
    y=0  ;for (x=0;x<=n+1;x++) m[y][x]=1;
    y=n+1;for (x=0;x<=n+1;x++) m[y][x]=1;
    x=0  ;for (y=0;y<=n+1;y++) m[y][x]=1;
    x=n+1;for (y=0;y<=n+1;y++) m[y][x]=1;
    for (y=1;y<=n;y++) {
        for (x=1;x<=n;x++) {
            m[y][x]=0;
        }
    }
    x=1;
    y=1;
    k=0;
    d=""D"";
    while (1) {
        k++;
        if (k>n*n) break;
        m[y][x]=k;
        switch (d) {
            case ""D"":
                if (0==m[y+1][x])  y++;
                else              {x++;d=""R"";}
            break;
            case ""R"":
                if (0==m[y][x+1])  x++;
                else              {y--;d=""U"";}
            break;
            case ""U"":
                if (0==m[y-1][x])  y--;
                else              {x--;d=""L"";}
            break;
            case ""L"":
                if (0==m[y][x-1])  x--;
                else              {y++;d=""D"";}
            break;
        }
    }
    w=sprintf(str,"%d",n*n);
    for (y=1;y<=n;y++) {
        for (x=1;x<=n;x++) {
            printf(" %0*d",w,m[y][x]);
        }
        printf("\n");
    }
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C语言 蛇形填数 求指导释
喜欢 (0)
[1034331897@qq.com]
分享 (0)