题解 | #超级圣诞树#
超级圣诞树
https://www.nowcoder.com/practice/470d26c9a73e4e17be8cc45cac843423
#include <stdio.h> #include <math.h> int main() { int n, i, j; scanf("%d", &n); int a = pow(2, n - 1) * 3; // 计算树的主体高度 int width = 2 * a - 1; // 树的总宽度 `width` char chs[a + n][width]; // a + n 行用于容纳树的主体和树干 // 初始化字符数组为空格,填充整个二维数组 for (i = 0; i < a + n; i++) { for (j = 0; j < width; j++) { chs[i][j] = ' '; } } // 绘制初始的基础三角形 chs[0][a - 1] = '*'; chs[1][a - 2] = chs[1][a] = '*'; chs[2][a - 3] = chs[2][a - 1] = chs[2][a + 1] = '*'; // 递归生成更大的三角形 int h = 3; // 初始高度 `h` 设置为3,对应基础三角形的高度 while (h < a) { // 当高度小于 `a` 时循环,递归构建更大的三角形 for (i = 0; i < h; i++) { // 遍历当前高度的每一行 // a - 1 是三角形的中心位置,通过 a - 1 - i 和 a - 1 + i 控制每一行的左右边界。 for (j = a - 1 - i; j <= a - 1 + i; j++) { chs[i + h][j - h] = chs[i][j]; // 将当前行的星号区域复制到左下方 chs[i + h][j + h] = chs[i][j]; // 将当前行的星号区域复制到右下方 } } h *= 2; // 将高度 `h` 翻倍,继续递归构建更大的三角形 } // 绘制树干 for (i = a; i < a + n; i++) { chs[i][a - 1] = '*'; } // 遍历字符数组输出结果 for (i = 0; i < a + n; i++) { for (j = 0; j < width; j++) { printf("%c", chs[i][j]); } printf("\n"); } return 0; }