下面是一个5*5阶的螺旋方阵,试编程打印出此形式的n*n(n<10)阶的方阵(顺时针旋进)。
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
提示:用二维数组实现。
第1个回答 2009-07-07
#include<stdio.h>
#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<SIZE; j++)
for (i=0; i<SIZE; 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<n; j++)
{
for (i=0; i<n; 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
*/本回答被提问者和网友采纳
#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<SIZE; j++)
for (i=0; i<SIZE; 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<n; j++)
{
for (i=0; i<n; 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
*/本回答被提问者和网友采纳