蛇形数组

蛇形数组的打印

  • 如下图,这就是一个蛇形数组

这里写图片描述

  • 那我们该如何打印出来呢?首先定义圈数。如下图。列子是8行8列的。
  • 3行3列 需要2圈;4行4列 需要2圈。
  • 5行5列 需要3圈;6行6列 需要3圈。
  • 不说了,意思是圈数就是行(列)数加1 然后 模2。

这里写图片描述

然后接下来就简单了。

  • 第一步,从左往右依次递增。利用for循环。
  • 第二步,从上往下一次递增。同样for循环。
  • 第三步,从右往左一次递增。同样for循环。
  • 第四步,从下往上一次递增。同样for循环。
    这里写图片描述

  • 但是这块有个注意事项。每次循环完毕之后ij会指向圈外。直接看图。
    这里写图片描述

  • 我的橙色的圈代表每次停留的位置,蓝色的圈代表每次需要移动到的新位置。只画了外圈,里面的圈还没有画。相信大家的水平。

#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");
}
代码实现比较简单。我就不多废话了有疑问请留言。写的不好,有问题还请大神指点指点。
阅读更多

没有更多推荐了,返回首页