user-0 提问: 打印5*5螺旋方阵问题

回复:
user: user-1
content: 引用 2 楼 flora1203315558 的回复:[quote=引用 1 楼 qq423399099 的回复:] 参考  #include <stdio.h>  int main(int argc, char* argv[]) { 	int a, b, c, d, i, n, num = 1, array[20][20];  	scanf("%d", &n);  	/* a, b, c, d分别为上、下、左、右边界，a、b为行号，c、d为列号 */ 	for (a = 0, b = n - 1, c = 0, d = n - 1; a <= b; a ++, b --, c ++, d --) { 		for (i = c; i <= d; i ++) array[a][i] = num ++; 		for (i = a + 1; i < b; i ++) array[i][d] = num ++; 		for (i = d; i > c; i --) array[b][i] = num ++; 		for (i = b; i > a; i --) array[i][c] = num ++; 	}  	for (i = 0; i < n; i ++) { 		for (a = 0; a < n; a ++) printf("%5d", array[i][a]); 		printf("\n"); 	}  	return 0; }  小妹拜服！我那个哪里错啦？[/quote]  建议单步调试观察你数组a的变化

user: user-2
content: void main() { int a[10][10],i,j,m,n,k=0; printf("enter n\n"); scanf("%d",&n);      if (n%2==0) m=n/2;     else m=(n+1)/2;      for(i=0;i<m;i++) 	{											//少个大括号         for(j=i;j<n-i;j++) a[i][j]=++k;         for(j=i+1;j<=n-i-1;j++) a[j][n-i-1]=++k;//j<=n-i-1少个等号         for(j=n-i-2;j>=i;j--) a[n-i-1][j]=++k;         for(j=n-i-2;j>=i+1;j--) a[j][i]=++k; 	}   for(i=0;i<n;i++)   { 	  for(j=0;j<n;j++) 		  printf("%d\t",a[i][j]);     printf("\n");   } }

user: user-2
content: for(i=0;i<m;i++)         for(j=i;j<n-i;j++) a[i][j]=++k;         for(j=i+1;j<n-i-1;j++) a[j][n-i-1]=++k;         for(j=n-i-2;j>=i;j--) a[n-i-1][j]=++k;         for(j=n-i-2;j>=i+1;j--) a[j][i]=++k;  这是楼主的代码。。我个人建议for循环和if判断之后加{}，不知道这里是复制过来的时候出现了问题还是你原来代码就是这样，计算机识别的时候你不加{}，他认为你 for(i=0;i<m;i++)中只有   for(j=i;j<n-i;j++) a[i][j]=++k; [code=c] for(i=0;i<m;i++)         for(j=i;j<n-i;j++) a[i][j]=++k;和      for(j=i+1;j<n-i-1;j++) a[j][n-i-1]=++k;         for(j=n-i-2;j>=i;j--) a[n-i-1][j]=++k;         for(j=n-i-2;j>=i+1;j--) a[j][i]=++k;是两部分

user: user-3
content: Do not let me think! #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");     } }

user: user-4
content: 引用 2 楼 flora1203315558 的回复:[quote=引用 1 楼 qq423399099 的回复:] 参考  #include <stdio.h>  int main(int argc, char* argv[]) { 	int a, b, c, d, i, n, num = 1, array[20][20];  	scanf("%d", &n);  	/* a, b, c, d分别为上、下、左、右边界，a、b为行号，c、d为列号 */ 	for (a = 0, b = n - 1, c = 0, d = n - 1; a <= b; a ++, b --, c ++, d --) { 		for (i = c; i <= d; i ++) array[a][i] = num ++; 		for (i = a + 1; i < b; i ++) array[i][d] = num ++; 		for (i = d; i > c; i --) array[b][i] = num ++; 		for (i = b; i > a; i --) array[i][c] = num ++; 	}  	for (i = 0; i < n; i ++) { 		for (a = 0; a < n; a ++) printf("%5d", array[i][a]); 		printf("\n"); 	}  	return 0; }  小妹拜服！我那个哪里错啦？[/quote]哥也很是服

user: user-0
content: 引用 1 楼 qq423399099 的回复:参考  #include <stdio.h>  int main(int argc, char* argv[]) { 	int a, b, c, d, i, n, num = 1, array[20][20];  	scanf("%d", &n);  	/* a, b, c, d分别为上、下、左、右边界，a、b为行号，c、d为列号 */ 	for (a = 0, b = n - 1, c = 0, d = n - 1; a <= b; a ++, b --, c ++, d --) { 		for (i = c; i <= d; i ++) array[a][i] = num ++; 		for (i = a + 1; i < b; i ++) array[i][d] = num ++; 		for (i = d; i > c; i --) array[b][i] = num ++; 		for (i = b; i > a; i --) array[i][c] = num ++; 	}  	for (i = 0; i < n; i ++) { 		for (a = 0; a < n; a ++) printf("%5d", array[i][a]); 		printf("\n"); 	}  	return 0; }  小妹拜服！我那个哪里错啦？

user: user-5
content: 参考  #include <stdio.h>  int main(int argc, char* argv[]) { 	int a, b, c, d, i, n, num = 1, array[20][20];  	scanf("%d", &n);  	/* a, b, c, d分别为上、下、左、右边界，a、b为行号，c、d为列号 */ 	for (a = 0, b = n - 1, c = 0, d = n - 1; a <= b; a ++, b --, c ++, d --) { 		for (i = c; i <= d; i ++) array[a][i] = num ++; 		for (i = a + 1; i < b; i ++) array[i][d] = num ++; 		for (i = d; i > c; i --) array[b][i] = num ++; 		for (i = b; i > a; i --) array[i][c] = num ++; 	}  	for (i = 0; i < n; i ++) { 		for (a = 0; a < n; a ++) printf("%5d", array[i][a]); 		printf("\n"); 	}  	return 0; }