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

下面是一个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
*/本回答被提问者和网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网