正好前段时间编过一个,是输出螺旋矩阵,和你这个要求一样。
#include
main()
{ int i,j=0,k=0,t=1; /* k标记圈数,从零开始,与矩阵一致。t记录矩阵内数字 */
int a[10][10],row; /* row代表矩阵阶数 */
printf("input the row of array:");
scanf("%d",&row);
while(k<=(row+2)/2)
{ i=k; /* 由左到右赋值 */
for(j=k;j<=row-k-1;j++)
{ a[i][j]=t;
t++;
}
j=row-k-1; /* 由上到下赋值 */
for(i=k+1;i<=row-k-1;i++)
{ a[i][j]=t;
t++;
}
i=row-k-1; /* 由右到左赋值 */
for(j=row-k-1-1;j>=k;j--)
{ a[i][j]=t;
t++;
}
j=k; /* 由下到上赋值 */
for(i=row-k-1-1;i>=k+1;i--)
{ a[i][j]=t;
t++;
}
k++; /* 圈数增加 */
}
for(i=0;i
printf("\n");
}
}
通过变量向量d来控制坐标(i,j)的前进方向,通过num来告诉(i,j)当前位置应该写入的数值,通过越界或者已经当前位置已经有数值了告诉方向dir转向。
程序如下,已通过测试:
#include
#include
#define MAXN 100
const int d[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int main()
{
int n;
int a[MAXN][MAXN];
int dir=0, num=0;
int i,j,ti,tj;
for (i=0; i
scanf("%d",&n);
ti=0; tj=0;
while (num
i=ti; j=tj;
a[i][j]=num;
ti=i+d[dir][0];
tj=j+d[dir][1];
if (ti<0 || tj<0 || ti>=n || tj>=n
|| a[ti][tj]>0) {
dir=(dir+1)%4;
ti=i+d[dir][0];
tj=j+d[dir][1];
}
}
for (i=0; i
printf("\n");
}
system("pause");
return 0;
}
没思路~
唉,我也是个菜鸟