戴尔pp18l参数:编程,用C语言,在TC环境下运行.编一个n*n的螺旋矩.

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 06:06:02
例如:5*5的
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

#include <stdio.h>
#include <malloc.h>
#include <memory.h>

#define RIGHT 1
#define DOWN 2
#define LEFT 3
#define UP 4

int f=RIGHT;

int getNextF(void) //获取下一个方向
{
if (UP==f)
f=RIGHT;
else
f++;
return f;
}
int main()
{
int n;
printf("请输入螺旋的宽度:\n");
scanf("%d", &n);

int *i;
i=(int *)malloc(sizeof(int)*n*n); //数据存放区

if (NULL==i)
{
printf("申请内存失败!\n");
return (-1);
}

int k;
for (k=0; k<n*n; k++) //所有地方都设置成-1,表示该地方没有被使用过
i[k]=-1;

int j;
int nStart;
nStart=-1; //起始位置

for(j=0; j<n*n; j++)
{
l:
if (RIGHT==f)
{
if ((-1==nStart || (nStart+1)%n!=0) && i[nStart+1]==-1)
i[++nStart]=j+1;
else
{
getNextF();
goto l;
}
}
else if (DOWN==f)
{
if (((nStart+1)/n +1<=n) && i[nStart+n]==-1)
{
nStart+=n;
i[nStart]=j+1;
}
else
{
getNextF();
goto l;
}
}
else if (LEFT==f)
{
if (nStart%n !=0 && i[nStart-1]==-1)
{
i[--nStart]=j+1;
}
else
{
getNextF();
goto l;
}
}
else if (UP==f)
{
if (i[nStart-n]==-1)
{
nStart-=n;
i[nStart]=j+1;
}
else
{
getNextF();
goto l;
}
}

}

for (j=0; j<n; j++)
{
for (k=0; k<n; k++)
printf("%3d ", i[j*n+k]);
putchar('\n');
}
free(i);
return 0;
}