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;
    }
    
  • 相关阅读:
    LeetCode OJ String to Integer (atoi) 字符串转数字
    HDU 1005 Number Sequence(AC代码)
    HDU 1004 Let the Balloon Rise(AC代码)
    HDU 1003 Max Sum(AC代码)
    012 Integer to Roman 整数转换成罗马数字
    011 Container With Most Water 盛最多水的容器
    010 Regular Expression Matching 正则表达式匹配
    007 Reverse Integer 旋转整数
    006 ZigZag Conversion
    005 Longest Palindromic Substring 最长回文子串
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11587040.html
Copyright © 2011-2022 走看看