下面是一个5*5阶的螺旋方阵,试编程打印出此形式的n*n(n<10)阶的方阵(顺时针旋进)。

2025-03-04 06:42:10
推荐回答(1个)
回答1:

#include

#define SIZE 9
void main()
{
long pData[SIZE][SIZE];
long n=0;
printf("请输入大小( n<10 ):\n");
scanf("%d", &n);
if (n>=10)
n=9;

long i=0, j=0, k=0;
for (j=0; j for (i=0; i pData[j][i] = 0;

i=0; j=0;
long nDirection = 0; // 0,1,2,3 右 下 左 上
for (k=1; k<=n*n; k++)
{
pData[j][i] = k;
switch(nDirection)
{
case 0:
if (i>=n-1 || pData[j][i+1]!=0)
{
nDirection++;
j++;
}else
{
i++;
}
break;
case 1:
if (j>=n-1 || pData[j+1][i]!=0)
{
nDirection++;
i--;
}else
{
j++;
}
break;
case 2:
if (i<=0 || pData[j][i-1]!=0)
{
nDirection++;
j--;
}else
{
i--;
}
break;
case 3:
if (j<=0 || pData[j-1][i]!=0)
{
nDirection=0;
i++;
}else
{
j--;
}
break;
}
}

for (j=0; j {
for (i=0; i {
printf("%5d", pData[j][i]);
}
printf("\n");
}
getchar();
}

/*
请输入大小( n<10 ):
9
1 2 3 4 5 6 7 8 9
32 33 34 35 36 37 38 39 10
31 56 57 58 59 60 61 40 11
30 55 72 73 74 75 62 41 12
29 54 71 80 81 76 63 42 13
28 53 70 79 78 77 64 43 14
27 52 69 68 67 66 65 44 15
26 51 50 49 48 47 46 45 16
25 24 23 22 21 20 19 18 17
Press any key to continue
*/