题解 | #超级圣诞树#
超级圣诞树
https://www.nowcoder.com/practice/470d26c9a73e4e17be8cc45cac843423
#include <iostream> #include <cmath> using namespace std; int main() { int n; while (cin >> n) { int i=0,j=0,k=0; int x=3*pow(2,(n-1)); int h=x+n,w=2*x-1; //图形的高度与宽度。 int c=x-1;//中心列的下标; char p[h][w];//定义画布; for(i=0;i<h;i++)//初始化画布; { for(j=0;j<w;j++) p[i][j]=' '; } for(i=x;i<h;i++) p[i][c]='*';//绘制树干 for(i=0;i<3;i++) { p[i][c-i]='*'; p[i][c+i]='*'; } p[2][c]='*';//上面的部分绘制初始三角形在画布的最上方中间。 for(i=1;i<n;i++)//开始递归 { int t=3*pow(2,i-1);//上半部分的行数; for(j=0;j<t;j++)//开始绘制下半部分 { for(k=c-j;k<=c+j;k++) { p[t+j][k-t]=p[j][k];//复制到左下 p[t+j][k+t]=p[j][k];//复制到右下 } } } for(i=0;i<h;i++)//打印图形 { for(j=0;j<w;j++) cout<<p[i][j]; cout<<endl; } } return 0; }