我写的打印数字螺旋的程序输出有问题

我的想法是把一个正方形的数字分成两个“L”形然后各自输出,下面是代码:int generate(int *pArr , int len){ int num = len*len+1, row = 0 , col = 0; int count , inc =1 , range=len; for( count = 0 ; count < len+1 ; ++count ) { int n; for( n = 0 ; n < range ; ++n ) { pArr[row*len+col] = --num; col += inc; } for( n = 0 ; n < range-1 ; ++n) { pArr[row*len+col] = --num; row += inc; } range -= 2; inc = -inc; }}以下是输出:xxx@xxx-desktop:~$ ./main 30 0 5 0 0 4 0 0 0 xxx@xxx-desktop:~$ ./main 40 0 0 11 0 0 0 10 0 7 8 9 135097 0 0 0 谢谢!
2026年09月28日 00:28
有1个网友回答
网友(1):

这种代码看起来很费事。给你提供一个顺时针旋转、纯计算的的作参考……
#include "stdafx.h"
#include "stdio.h"
#define max(a,b) ((a)<(b) ? (b) : (a))
#define abs(a) ((a)>0 ? (a) : -(a))
int foo(int x,int y){
int t=max(abs(x),abs(y));
int u=t+t;
int v=u-1;
v=v*v+u;
if(x==-t) v+=u+t-y;
else if(y==-t) v+=3*u+x-t;
else if(y==t) v+=t-x;
else v+=y-t;
return v;
}
void main(void){
int x,y;
for(y=-4;y<=4;y++){
for(x=-4;x<=4;x++)
printf("%4d",foo(x,y));
printf("\n");
}
while(scanf("%d%d",&x,&y)==2)
printf("%d\n",foo(x,y));
}