螺旋三角形 (一)

思路:

  1、依次画三角形的上边、斜边和左边,从最外层开始画起。

  2、每层的每条边长度相等,例如:num为5时,第一层边(最外层)的长度为num - 1;

  3、当最后一层只有一个点时(此时,边长为0),需要特殊处理。

int GetLevels(int num)
{
    int cnt = 0;
    for (int i = num; i > 0; i -= 3) {
        cnt ++;
    }

    return cnt;
}

int GetSideLen(int level, int num)
{
    return num - (level - 1) * 3 - 1; 
}

int arr[11][11];

void OutputTriangle(int num)
{
    int levels = GetLevels(num);
    int level = 1;
    int x, y;
    int start = 1;
    int tt = 0;

    for (;level <= levels; tt++) {
        int sideLen = GetSideLen(level, num);

        if (sideLen == 0) {
            arr[level][level] = start++;
        }

        for (x = level; x < level + sideLen; x++) {
            if (arr[level][x] == 0) {
                arr[level][x] = start++;
            }
        }

        for (x, y = level; y < level + sideLen; y++, x--) {
            if (arr[y][x] == 0) {
                arr[y][x] = start++;
            }
        }

        for (y; y > level; y --) {
            if (arr[y][level] == 0) {
                arr[y][level] = start++;
            }
        }

        level ++;
    }
}

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 main()
{
  for (int i = 0; i < 11; i++) {
    memset(arr[i], 0, sizeof(int) * 11);
  }
  int n;
  scanf("%d", &n);
  OutputTriangle(n);
  Show(n);
  return 0;

}

 

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