• [luogu p1498] 南蛮图腾


    传送门

    题面

    题目描述

    自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷......帮忙,作为一个好孙子的孙子的孙子的孙子......你能做到吗?

    输入输出格式

    每个数据一个数字,表示图腾的大小(此大小非彼大小) n

    输出格式

    这个大小的图腾

    输入输出样例

    输入样例 #1

    2
    

    输出样例 #1

       /
      /__
     /  /
    /__/__
    

    输入样例 #2

    3
    

    输出样例 #2

           /
          /__
         /  /
        /__/__
       /      /
      /__    /__
     /  /  /  /
    /__/__/__/__
    

    分析

    赤裸裸的谢尔宾斯基三角啊,直接考虑分治输出。
    前导空格的处理有些技巧,详见代码。
    如果你想了解更多的谢尔宾斯基三角形知识,可以戳。(wikipedia

    代码

    很简单的分治递归操作。

    /*
     * @Author: crab-in-the-northeast 
     * @Date: 2020-02-23 16:14:17 
     * @Last Modified by: crab-in-the-northeast
     * @Last Modified time: 2020-02-23 16:32:21
     */
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    const int maxn = 2055;
    char a[maxn][maxn];
    
    int qpow(int a,int p) {
        int ans = 1, base = a;
        while(p) {
            if(p & 1) ans *= base;
            base *= base;
            p >>= 1;
        }
        return ans;
    }//快速幂板子。
    
    void draw(int x,int y,int depth) {
        if(depth == 1) {//递归到最小层了,赋值
            a[x][y] = a[x - 1][y + 1] = '/';
            a[x][y + 1] = a[x][y + 2] = '_';
            a[x][y + 3] = a[x - 1][y + 2] = '\';
            return ;
        }
        int h = qpow(2,depth);//这是一个很巧妙的解法,我在这里光说你可能也不会理解,打个草稿
        //你就明白了。
        draw(x,y,depth-1);//分
        draw(x,y + h,depth-1);//分
        draw(x - (h >> 1),y + (h >> 1),depth-1);//分
    }
    
    int main() {
        int n;
        scanf("%d",&n);
        memset(a,' ',sizeof(a));//初始化为空格
    
        int h = qpow(2,n);
        draw(h,1,n);
        for(int i = 1; i <= h; i++,puts(""))
            for(int j = 1; j <= h * 2; j++)
                printf("%c",a[i][j]);
        printf("
    ");
        return 0;
    }
    

    评测结果

    AC 100R30979237

  • 相关阅读:
    php生成excel
    gearmand
    开启Nginx的目录文件列表功能
    zend框架学习
    引用方法形成树
    智能指针实现
    图文例解C++类的多重继承与虚拟继承
    CC++定位崩溃代码行的方法
    C++函数重定义、重载、重写
    勤奋吧,一天一点,努力提高基本技能。
  • 原文地址:https://www.cnblogs.com/crab-in-the-northeast/p/luogu-p1498.html
Copyright © 2020-2023  润新知