这个代码看不懂哎,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;
}
#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"); } }