递归画三角形

关于十二月份月赛的通知 本学期最后两次月赛将于12月17日,1月7日举行 1. 本次月赛时间为12月17月9:00-12:00 2. 地点:另行通知 3. 本次比赛可以携带纸质书籍查阅资料 4. 10%一等奖,20%二等奖,30%三等奖 5. 获得一等奖的同学直接进入ACM集训队 欢迎大家报名参加比赛!! 报名链接:https://wj.qq.com/s/1745264/6f12

3306: 美男有毒

时间限制: 1 Sec  内存限制: 256 MB
提交: 17  解决: 6
[提交][状态][讨论版]

题目描述

    众所周知,gyt喜欢玩“美男有毒”这款游戏,在这款游戏里,gyt一夜之间无辜“被穿越”,没有倾城之貌也就算了,竟然还自带称号“帝都第一丑女”!王妃梦碎,老爹嫌弃,继母暗害,到底能信任何人,日子真要过得如此凄惨吗?
    就在这困难之际,天神伸出援手,告诉gyt,只要gyt答对了一个问题就可以穿越回现代,然而gyt太菜了,不知道这个问题的答案是什么,快来帮他回答吧。
    谢尔宾斯基三角形是这样一类图形,当你输入n可以得到以下图形:
n=0:
 *
* *
n=1:
   *
  * *
 *   *
* * * *
n=2:
       *
      * *
     *   *
    * * * *
   *       *
  * *     * *
 *   *   *   *
* * * * * * * *
可以发现,n号谢尔宾斯基三角形是由三个n-1号谢尔宾斯基三角形拼接得来的,现在天神给你一个n,要求你输出相应的谢尔宾斯基三角形。

输入

第一行一个正整数t,表示样例个数。
接下来t行,每行一个非负数n(n<10)


输出

对于每一个n,输出相应的谢尔宾斯基三角形(注意每一行的最后一个*后面均无空格)

样例输入

3
0
1
2

样例输出

 *
* *
   *
  * *
 *   *
* * * *
       *
      * *
     *   *
    * * * *
   *       *
  * *     * *
 *   *   *   *
* * * * * * * *

提示

 

来源

 
[提交][状态]
 
#include<bits/stdc++.h>
using namespace std;
char p[2500][2500];

void Draw(int n,int x,int y){
    if(n==0){
        p[x][y+1]='*';
        p[x+1][y]='*';
        p[x+1][y+2]='*';
        return;
    }
    Draw(n-1,x,y+(1<<n));//不断调用这个y一直向后移就得到开头的了
    Draw(n-1,x+(1<<n),y);//然后下移了一个三角形,先第一个,然后第三个啊啊啊啊!什么鬼
    Draw(n-1,x+(1<<n),y+(1<<(n+1)));
}

int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        memset(p,' ',sizeof(p));
        Draw(n,0,0);
        for(int i=0;i<(1<<(n+1));i++)
            for(int j=2500-1;p[i][j]==' ';p[i][j]='',j--);
        for(int i=0;i<(1<<(n+1));i++)
            printf("%s
",p[i]);
    }

    return 0;
}
原文地址:https://www.cnblogs.com/cunyusup/p/8012860.html