题解 | #超级圣诞树#

超级圣诞树

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;
}

全部评论

相关推荐

牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
4 收藏 评论
分享
牛客网
牛客企业服务