蛇形数组的打印
- 如下图,这就是一个蛇形数组
- 那我们该如何打印出来呢?首先定义圈数。如下图。列子是8行8列的。
- 3行3列 需要2圈;4行4列 需要2圈。
- 5行5列 需要3圈;6行6列 需要3圈。
- 不说了,意思是圈数就是行(列)数加1 然后 模2。
然后接下来就简单了。
- 第一步,从左往右依次递增。利用
for
循环。 - 第二步,从上往下一次递增。同样
for
循环。 - 第三步,从右往左一次递增。同样
for
循环。 第四步,从下往上一次递增。同样
for
循环。
但是这块有个注意事项。每次循环完毕之后
i
和j
会指向圈外。直接看图。
我的橙色的圈代表每次停留的位置,蓝色的圈代表每次需要移动到的新位置。只画了外圈,里面的圈还没有画。相信大家的水平。
#include<stdio.h>
#define N 8
int arr[N][N] = {0};
void show(void)
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
printf("%-4d", arr[i][j]);
}
printf("\n");
}
}
int main()
{
int circle = (N + 1) / 2; //圈数
int i = 0;
int j = 0;
int num = 1;
for (int k = 0; k < circle; k++)
{
while (j < N - k)
{
arr[i][j] = num++;
j++;
}
j--;
i++;
while (i < N - k)
{
arr[i][j] = num++;
i++;
}
i--;
j--;
while (j >= k)
{
arr[i][j] = num++;
j--;
}
j++;
i--;
while (i > k)
{
arr[i][j] = num++;
i--;
}
i++;
j++;
}
show();
system("pause");
}