首页 > 其他 > 详细

分形几何(递归)

时间:2019-10-30 01:52:43      阅读:135      评论:0      收藏:0      [点我收藏+]

 

Description

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

技术分享图片技术分享图片

一个分形块可以定义为如下内容:

  • 度数为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的分形块!

Input

输入包括多个测试样例,每个测试样例是一个不超过7的正整数,以-1表示输入结束。

Output

对于每一个测试样例,用大写字母‘X’表示分形盒子中的元素,按照度数要求输出分形块。每一个分形块输出结束后用破折号‘-’分隔。

Sample Input

1
2
3
4
-1

Sample Output

X
-
X X
 X
X X
-
X X   X X
 X     X
X X   X X
   X X
    X
   X X
X X   X X
 X     X
X X   X X
-
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
   X X               X X
    X                 X
   X X               X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
         X X   X X
          X     X
         X X   X X
            X X
             X
            X X
         X X   X X
          X     X
         X X   X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
   X X               X X
    X                 X
   X X               X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
-

HINT

!输出数据中每行后面均有以空格符。注意输出格式控制!

 

 

 

 

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <iostream>
  4 #include <string>
  5 #include <math.h>
  6 #include <algorithm>
  7 #include <vector>
  8 #include <stack>
  9 #include <queue>
 10 #include <set>
 11 #include <map>
 12 #include <sstream>
 13 const int INF=0x3f3f3f3f;
 14 typedef long long LL;
 15 const int mod=1e9+7;
 16 //const double PI=acos(-1);
 17 #define Bug cout<<"---------------------"<<endl
 18 const int maxn=1e5+10;
 19 using namespace std;
 20 
 21 void PT(int n)//输出n个空格 
 22 {
 23     for(int i=0;i<n;i++)
 24         printf(" ");
 25 }
 26 
 27 void F(int n,int L,int flag)//n为度数,L为层数,flag为1代表左边(要填充),flag为0代表右边 
 28 {
 29     if(n==1)
 30         printf("X");
 31     else
 32     {
 33         if(L<=pow(3,n-1)/3)
 34         {    
 35             if(flag)
 36                 F(n-1,L,flag);
 37             else
 38                 F(n-1,L,!flag);
 39             PT(pow(3,n-2));
 40             F(n-1,L,flag);
 41         }
 42         else if(L<=2*pow(3,n-1)/3)
 43         {
 44             PT(pow(3,n-2));
 45             F(n-1,L%(int)(pow(3,n-1)/3),flag);
 46             if(flag)
 47             PT(pow(3,n-2));        
 48         }
 49         else
 50         {
 51             if(flag)
 52                 F(n-1,L%(int)(pow(3,n-1)/3),flag);
 53             else
 54                 F(n-1,L%(int)(pow(3,n-1)/3),!flag);
 55             PT(pow(3,n-2));
 56             F(n-1,L%(int)(pow(3,n-1)/3),flag);
 57         }
 58     }
 59 }
 60 
 61 void Solve(int n) 
 62 {
 63     if(n==1)
 64     {
 65         printf("X");
 66         return ;
 67     }
 68     for(int i=1;i<=pow(3,n-1)/3;i++)
 69     {
 70         F(n-1,i,1);
 71         PT(pow(3,n-2));
 72         F(n-1,i,0);
 73         printf("\n");
 74     }
 75     for(int i=1;i<=pow(3,n-1)/3;i++)
 76     {
 77         PT(pow(3,n-2));
 78         F(n-1,i,0);
 79         printf("\n");
 80     }
 81     for(int i=1;i<=pow(3,n-1)/3;i++)
 82     {
 83         F(n-1,i,1);
 84         PT(pow(3,n-2));
 85         F(n-1,i,0);
 86         printf("\n");
 87     }
 88 }
 89 
 90 int main()
 91 {
 92     int n;
 93     while(~scanf("%d",&n)&&n!=-1)
 94     {
 95         if(n==1)
 96             printf("X\n");
 97         else Solve(n);
 98         printf("-\n");
 99     }
100     return 0;
101 }

 

分形几何(递归)

原文:https://www.cnblogs.com/jiamian/p/11762370.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!