螺旋三角形 (二)

参考:https://www.cnblogs.com/lanaiwanqi/p/6684490.html,比我自己写的简单。

思路:

  1、给数组设置岗哨。

  2、依照三角形的边的顺序逐次填充。

int arr[N][N];

int GetLastNum(int num)
{
    return (num + 1) * num / 2;
}

void GenerateTriangle(int num)
{
    int start = 1;
    int lastNum = GetLastNum(num);
    int x = 0, y = 1;

    /* arr初始化 */
    for (int i = 0; i < N; i++) {
        memset(arr[i], 0, sizeof(int) * N);
    }
    /* 设置数组边岗哨 */
    for (int i = 0; i < N; i++) { 
        arr[i][0] = arr[0][i] = 1;  
    }

    arr[1][num + 1] = 1; // 设置第一行的岗哨

    while (start <= lastNum) {

        // 上边
        while (arr[y][x + 1] == 0) {
            arr[y][++x] = start++;
        }

        // 斜边
        while (arr[y+1][x-1] == 0) {
            arr[++y][--x] = start++;
        }

        // 左边
        while (arr[y-1][x] == 0) {
            arr[--y][x] = start++;
        }
    }
}

void Show(int num)
{
    for (int y = 1; y <= num; y++) {
        for (int x = 1; x <= num - y + 1; x++) {
            printf("%d ", arr[y][x]);
        }
        putchar('\n');
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    int n;
    scanf("%d", &n);
    GenerateTriangle(n);
    Show(n);

    return 0;
}

 

posted @ 2020-06-06 11:10  太极者  阅读(269)  评论(0编辑  收藏  举报