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