- 将螺旋方阵存放到n*n 的二维数组中并把它打印输出。要求由程序自动生成图(1)所示螺旋方阵(而不是人为的初始化或逐个赋值)。 由程序读入。
1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9 图(1)
[此贴子已经被作者于2005-11-28 16:20:48编辑过]
没运行过,不知道对错~
#include <stdio.h>
void main()
{
int a[10][10],i,j,k=1,m,t,n;
printf("please input n: \n");
scanf("d%",&n);
if(n>10||n<=0) //这里考虑10以内的
{
printf("input error.\n");
exit(-1);
}
t=(n+1)/2;
for(m=0;m<t;m++) //从外到里一共的圈数。
{
for(i=0+m;i<n;i++)
a[i][0+m]=k++;
for(j=1+m;j<n;j++)
a[n-1-m][j]=k++;
for(i=n-2-m;n>=0;i--)
a[i][n-1-m]=k++;
for(j=n-2-m;j>0;j--)
a[0+m][j]=k++;
n-=1;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
[此贴子已经被作者于2005-11-30 1:26:05编辑过]
#include <stdio.h>
void main()
{
int a[10][10]={0},k,i=0,j=0,c=1,n;
a:printf("please input n: \n");
scanf("%d",&n);
if(n>10||n<=0)
{
printf("input error.\n");
goto a;
}
a[i][j]=1;
for(k=2;k<=n^2;k++)
{
if(i+1<n&&a[i+1][j]==0&&c)
{
a[i+1][j]=k;
i++;
}
else if(j+1<n&&a[i][j+1]==0)
{
a[i][j+1]=k;
j++;
}
else if(i-1>=0&&a[i-1][j]==0)
{
a[i-1][j]=k;
i--;
}
else if(j-1>=0&&a[i][j-1]==0)
{
a[i][j-1]=k;
j--;
c=0;
if(a[i][j-1]!=0)
c=1;
}
else
break;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
getch();
}
我是新手,有错误大家就告诉我
[此贴子已经被作者于2005-11-30 3:44:17编辑过]