• 【递归】分形


    题目描述

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


    盒型分形定义如下:
    度数为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 <cstring>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <time.h>
    #include <string>
    #include <map>
    #include <stack>
    #include <vector>
    #include <set>
    #include <queue>
    using namespace std;
    int n,cnt=0;
    char w[750][750];
    void dfs(int n,int x,int y)
    {
        if(n==1){w[x][y]='X';return;}
        int m=pow(3,n-2);
        dfs(n-1,x,y);
        dfs(n-1,x+m,y+m);
        dfs(n-1,x+2*m,y);
        dfs(n-1,x,y+2*m);
        dfs(n-1,x+2*m,y+2*m);
    }
    int main()
    {
        while(~scanf("%d",&n)&&n!=-1)
        {
            int k=pow(3,n-1);
            for(int i=0;i<k;i++)
                for(int j=0;j<k;j++)
                   w[i][j]=' ';
            for(int i=0;i<k;i++)w[i][k]='';
            dfs(n,0,0);
            for(int i=0;i<k;i++)
                for(int j=k-1;j>=0;j--)
                  if(w[i][j]=='X')break;
                  else w[i][j]='';
            for(int i=0;i<k;i++)puts(w[i]);
            printf("----------
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    使用ANT入门例子
    React 项目中使用create-react-app创建项目引入antd样式不起作用的问题
    js中对象数组遍历,及区别
    vue中axios封装
    uni-app中开发需要注意事项
    git 提交代码和 合并分支 ,回滚代码
    vue..js3.0
    vue中强制组件重新渲染
    vuex中获取当前路由
    H5 video在移动端播放层级问题
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/5691702.html
Copyright © 2020-2023  润新知