• 【递归】分形


    题目描述

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


    盒型分形定义如下:
    度数为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
    ----------
    

     1 #include <iostream>
     2 #include <bits/stdc++.h>
     3 using namespace std;
     4 char mapp[800][800];               //记录图形
     5 void solve(int n,int x,int y)
     6 {
     7     if(n==1)
     8     {
     9         mapp[x][y]='X';
    10     }
    11     else
    12     {
    13         int sizee=pow(3.0,n-2);          
    14         solve(n-1,x,y);                  //递归
    15         solve(n-1,x+sizee*2,y);
    16         solve(n-1,x+sizee,y+sizee);
    17         solve(n-1,x,y+sizee*2);
    18         solve(n-1,x+sizee*2,y+sizee*2);
    19     }
    20 }
    21 int main()
    22 {
    23     int n;
    24     while(cin>>n)
    25     {
    26         if(n==-1)
    27             break;
    28         int m=pow(3.0,n-1);        //m为图形大小
    29         for(int i=0;i<m;i++)
    30         {
    31             for(int j=0;j<m;j++)
    32                 mapp[i][j]=' ';        //初始化
    33         }
    34         for(int i=0;i<m;i++)
    35         {
    36             mapp[i][m]='';      
    37         }
    38         solve(n,0,0);
    39         for(int i=0;i<m;i++)
    40         {
    41             for(int j=m-1;j>=0;j--)
    42             {
    43                 if(mapp[i][j]=='X')       //若为X则该行遍历结束
    44                     break; 
    45                 else if(mapp[i][j]!='X')  //若非X则赋为''
    46                     mapp[i][j]='';
    47             }
    48         }
    49         for(int i=0;i<m;i++)
    50             printf("%s
    ",mapp[i]);
    51         printf("----------
    ");
    52     }
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    表达式树作为条件封装多表连查
    EF之结构进一步优化
    EF之ExecuteSqlCommand更新出现无效的解决方案
    dynamic与匿名对象
    webapi 通过dynamic 接收可变参数
    EF INNER JOIN,LEFT JOIN,GROUP JOIN
    Linq join on 多条件
    Excel 行列转置 解决竖向拉,字母跟着递增的问题
    Windows7 安装vs2015 之后 调试Web项目IIS启动不了 aspnetcore.dll未能加载
    Mysql 服务在本机,需要单机调试Mysql数据库 发生 不认识hostname‘localhost’
  • 原文地址:https://www.cnblogs.com/SoulSecret/p/8367352.html
Copyright © 2020-2023  润新知