c打印螺旋矩阵。欢迎交流。
#include<stdio.h>
#include<math.h>
int an(int i,int j);
void bn (int x);
void cn(int x) /* 已知数求位置坐标的函数*/
{
int i,m;
i=(int)sqrt(x);
m=(i*i+(i+1)*(i+1)+1)/2;
if(x==1)
printf("1=(0,0)\n");
else
{
if(x==(i*i))
{
if(i%2)
printf("%d=(%d,%d)\n",x,(i-1)/2,-(i-1)/2);
else
printf("%d=(%d,%d)\n",x,-i/2+1,i/2);
}
else
{
if (i%2)
{
if(x<=m)
{
i;
printf("%d=(%d,%d)\n",x,(i+1)/2,(i+1)/2-(m-x));
}
else
{
i;
printf("%d=(%d,%d)\n",x,(i+1)/2-(x-m),(i+1)/2);
}
}
else
{
if(x<=m)
{
int n;
n=(-i)/2+(m-x);
printf("%d=(%d,%d)\n",x,(-i)/2,(-i)/2+(m-x));
}
else
{
i;
printf("%d=(%d,%d)\n",x,(-i)/2+(x-m),(-i)/2);
}
}
}
}
}
void main() /* 主函数*/
{
int x,y,z;
printf("输入一个数字可求其对应坐标:\n");
scanf("%d",&x);
cn(x);
printf("输入一个坐标可求其对应数字.(只输入坐标值)\n");
scanf("%d%d",&y,&z);
printf("%d\n",an(y,z));
printf("输入一个数字N可打印其N阶方阵图形:\n");
scanf("%d",&y);
bn(y);
}
void bn (int x) /* 打印出数列图形的函数*/
{
int i,j;
for (j=-((x-1)/2);j<=x/2;j++)
{
for(i=-((x-1)/2);i<=x/2;i++)
printf("%d\t",an(i,j));
printf("\n");
}
}
int an(int i,int j) /* 已知位置坐标求数字的函数*/
{
int i1,j1,ij;
i1=abs(i);
j1=abs(j);
if (i1<j1)
{
ij=i1;
i1=j1;
j1=ij;
}
if (i+j>0)
{
i1=2*i1-1;
ij=(i1*i1+(i1+1)*(i1+1)+1)/2;
return ij+j-i;
}
else
{
i1=2*i1;
ij=(i1*i1+(i1+1)*(i1+1)+1)/2;
return ij+i-j;
}
}