• 【递归】分形


    【递归】分形

    题目描述

    分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。


    盒型分形定义如下:
    度数为1的分形为:
    X
    度数为2的分形为:
    X X
     X
    X X
    如果用B(n-1)代表度数为n-1的盒型分形,则度数为n的盒型分形可以递归的定义为:
    B(n-1)       B(n-1)
          B(n-1)
    B(n-1)       B(n-1)
        你的任务是输出度数为n的盒型分形。

    输入

    输入包含多个测试数据,每个测试数据占一行,包含一个正整数n,(n<=7)。输入最后一行为-1,表示结束。

    输出

    对每个测试数据,用X表示输出的盒型,每个测试数据对应的输出结果后输出一串"----------",每行的末尾不要输出任何多余的空格,否则得到的是格式错误的结果。

    样例输入

    1
    2
    3
    4
    -1
    

    样例输出

    X
    ----------
    X X
     X
    X X
    ----------
    X X   X X
     X     X
    X X   X X
       X X
        X
       X X
    X X   X X
     X     X
    X X   X X
    ----------
    X X   X X         X X   X X
     X     X           X     X
    X X   X X         X X   X X
       X X               X X
        X                 X
       X X               X X
    X X   X X         X X   X X
     X     X           X     X
    X X   X X         X X   X X
             X X   X X
              X     X
             X X   X X
                X X
                 X
                X X
             X X   X X
              X     X
             X X   X X
    X X   X X         X X   X X
     X     X           X     X
    X X   X X         X X   X X
       X X               X X
        X                 X
       X X               X X
    X X   X X         X X   X X
     X     X           X     X
    X X   X X         X X   X X
    ----------
    分析:递归
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <algorithm>
    #include <climits>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <list>
    #include <ext/rope>
    #define rep(i,m,n) for(i=m;i<=n;i++)
    #define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
    #define vi vector<int>
    #define pii pair<int,int>
    #define mod 1000000007
    #define inf 0x3f3f3f3f
    #define pb push_back
    #define mp make_pair
    #define fi first
    #define se second
    #define ll long long
    #define pi acos(-1.0)
    const int maxn=1e3+10;
    const int dis[][2]={{0,1},{-1,0},{0,-1},{1,0}};
    using namespace std;
    using namespace __gnu_cxx;
    ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
    ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
    char a[maxn][maxn];
    int len;
    void dfs(int l1,int l2,int r1,int r2)
    {
        if(l1==0)return;
        int l=l2-l1+1;
        for(int i=l1;i<=l2;i++)
            for(int j=r1;j<=r2;j++)
                a[i-l][j-l]=a[i-l][j+l]=a[i+l][j-l]=a[i+l][j+l]=a[i][j];
        dfs(l1-l,l2+l,r1-l,r2+l);
    }
    int main()
    {
        int i,j,m,n,k,t;
        while(~scanf("%d",&n)&&n!=-1)
        {
            memset(a,' ',sizeof(a));
            len=1;
            for(i=1;i<n;i++)len=len*3;
            a[len/2][len/2]='X';
            dfs(len/2,len/2,len/2,len/2);
            for(i=0;i<len;i++)
            {
                for(j=len;a[i][j]==' ';j--);
                a[i][j+1]=0;
                printf("%s
    ",a[i]);
            }
            puts("----------");
        }
        //system("pause");
        return 0;
    }
     
  • 相关阅读:
    最多区间覆盖问题
    Luogu2420 让我们异或吧
    高精度计算(三) /*高精度的乘法运算*/
    用canvas画时钟
    Chrome开发者工具学习
    float浮动与清除浮动
    理解css中的position-static elativefixedabsolute
    bootstrap
    cookie与localstorage和sessionstorage的区别比较
    cookie学习
  • 原文地址:https://www.cnblogs.com/dyzll/p/5645354.html
Copyright © 2020-2023  润新知