zoukankan      html  css  js  c++  java
  • VIJOS-P1167 南蛮图腾

    洛谷 P1498 南蛮图腾

    洛谷传送门

    JDOJ 1325: VIJOS-P1167 南蛮图腾

    JDOJ传送门

    Description

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

    Input

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

    Output

    这个大小的图腾

    Sample Input

    2

    Sample Output

    / / / / //__

    HINT

    N=3时的样子

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

    其实这是一个分形图,效果如下:

    img

    Source

    huyichen

    最优解声明

    题解:

    (扒一下大佬的思路)(太清奇了)

    我们看一下杨辉三角(对2取模后版本)

                1
               1 1 
              1 0 1 
             1 1 1 1 
            1 0 0 0 1 
           1 1 0 0 1 1 
          1 0 1 0 1 0 1 
         1 1 1 1 1 1 1 1 
        1 0 0 0 0 0 0 0 1 
       1 1 0 0 0 0 0 0 1 1 
      1 0 1 0 0 0 0 0 1 0 1
     1 1 1 1 0 0 0 0 1 1 1 1
    1 0 0 0 1 0 0 0 1 0 0 0 1
    

    我们发现这个东西和题目要求输出的东西很像。

    所以我们突发奇想,进行进一步思考:

    我们可以考虑用二维数组来存这个杨辉三角,但是会浪费很多无用的空间,所以我们可以用一维数组搞定,每行的开头元素在数组中的编号是(2^k)(从0开始编号)。

    然后开始找规律:

    奇数行碰到一就可以输出"/ ",偶数行如果有连续两个1就输出"/__ "。遇0就补空格。

    总之,以上的思路可以用一句话概括:乱搞+找规律。

    所以我都不知道把它放到什么分类好了。

    还是附上代码吧,可读性比较强:

    #include<cstdio>
    using namespace std;
    int n,a[1030]={1};
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<1<<n;++i)
        {
            for(int j=1;j<(1<<n)-i;++j)
                printf(" ");
            for(int j=i;j>=0;--j)
                a[j]^=a[j-1];
            if(!(i%2))
                for(int j=0;j<=i;++j)
                {
                    if(a[j])
                        printf("/\");
                    else
                        printf("  ");
                }
            else 
                for(int j=0;j<=i;j+=2)
                {
                    if(a[j])
                        printf("/__\");
                    else
                        printf("    ");
                }
            puts("");
        }
        return 0;
    }
    
  • 相关阅读:
    rabbitmq 安装和配置
    rabbitmq
    Redis Keys 命令
    python pickle模块
    Redis之Python操作
    flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法
    Python 并行分布式框架 Celery
    Celery+python+redis异步执行定时任务
    feed流拉取,读扩散,究竟是啥?
    DNS解析
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11587040.html
Copyright © 2011-2022 走看看