话不多说 先上代码:
int main()
{
int m,n,dire,x,y,b0,b1,b2,b3,val = 1; //0 右 1 上 2 左 3 下
printf("请输入矩阵的行数和列数:\n");
scanf("%d%d",&m,&n);
int array[m][n];
b0 = n - 1; b1 = 1 ; b2 = 0 ; b3 = m - 1;
dire = 2;
x = 0;
y = n-1;
while(val <= m*n)
{
if(dire == 2) //向左走
{
array[x][y--] = val++;
if(y == b2)
{
b2++;
dire = 3;
}
}
else if(dire == 3) //向下走
{
array[x++][y] = val++;
if(x == b3)
{
b3--;
dire = 0;
}
}
else if(dire == 0) //向右走
{
array[x][y++] = val++;
if(y == b0)
{
b0--;
dire = 1;
}
}
else if(dire == 1) //向上走
{
array[x--][y] = val++;
if(x == b1)
{
b1++;
dire = 2;
}
}
}
for(x = 0; x < m; x++)
{
for(y = 0; y < n; y++)
{
printf("%-3d",array[x][y]);
}
printf("\n");
}
return 0;
}
本程序依旧是按照先见数据存进二维数组里再打印出来的想法,思路是遇到边界则转方向,依次以螺旋的方式存数据,具体操作请看代码及注释~
若有错误的地方请指正哦