打印蛇形数组

April 5, 2016

唉, 不熟练连这样的题都不会入手。。

题目大概是这样 http://icpc.ahu.edu.cn/OJ/ContestProblem.aspx?cid=16&id=410 参考了 http://www.cnblogs.com/kaima/p/4773908.html

外部的 while 循环检查 number 是否到 N * N, 如果 N 为偶数则可以在这里停下, (最后四个位置刚好填完) 里面第一个 if 检查奇数 N 的情况(会填充剩下一个位置)

然后开始填充数组, 调节 x y 的坐标值填充一圈蛇形, 一圈后 x y 回归原点 缩小 size 变量 x+1, y+1 跳入内圈重复以上步骤又填充一圈, 直至跳出 while 循环

x y 走向

代码如下

```cpp #include

using namespace std;

const int SIZE = 110; int A[SIZE][SIZE];

int main() { int n; cin >> n;

int x = 0, y = 0;
int size = n - 1;
int number = 0;

int dest = n * n;
while (number < dest)
{
    if (number == dest - 1)
    {
        A[x][y] = number;
        break;
    }

    /* to left, down, right, up */

    for (int i = 0; i < size; ++i, ++x)
    {
        A[x][y] = number;
        number++;
    }

    for (int i = 0; i < size; ++i, ++y)
    {
        A[x][y] = number;
        number++;
    }

    for (int i = 0; i < size; ++i, x--)
    {
        A[x][y] = number;
        number++;
    }

    for (int i = 0; i < size; ++i, y--)
    {
        A[x][y] = number;
        number++;
    }

    size -= 2;
    x++;
    y++;

}

for (int y = 0; y < n; ++y)
{
    for (int x = 0; x < n; ++x)
    {
        cout << A[x][y] << " ";
    }

    cout << endl;
}
return 0;

}```

comments powered by Disqus