题解 | 超级圣诞树
超级圣诞树
https://www.nowcoder.com/practice/470d26c9a73e4e17be8cc45cac843423
#include <stdio.h> int main() { int n = 0; scanf("%d", &n); int arr[400][800] = { {0,0,1,0,0}, {0,1,0,1,0},{1,0,1,0,1} }; int i, j = 0, k, row = 3, col = 5; for (i = 2; i <= n; i++) { for (j = row; j < row * 2; j++) { for (k = 0; k < col; k++) { arr[j][k] = arr[j - row][k];//复制为左下角的三角形 arr[j][k + col + 1] = arr[j][k];//再把左下角复制到右下角 } } //因为最开始的三角形是靠近最左的,清空后再重新放置到左下和右下的中间 //先清空 for (j = 0; j < row; j++) { for (k = 0; k < col; k++) { arr[j][k] = 0; } } //放到中央 for (j = 0; j < row; j++) { for (k = (col + 1) / 2; k < col + (col + 1) / 2; k++) { arr[j][k] = arr[j + row][k - (col + 1) / 2]; } } //根据规律和递归思想 row *= 2; col = col * 2 + 1; } //打印圣诞树 for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (arr[i][j] == 0) { printf(" "); } else { printf("*"); } } printf("\n"); } //打印树根 for (i = 1; i <= n; i++) { for (j = 1; j < row; j++) { printf(" ");//打印空格 } printf("*\n"); } return 0; }