zoukankan      html  css  js  c++  java
  • 11E:分形盒

    总时间限制: 
    1000ms
     
    内存限制: 
    30000kB
    描述

    分形,通常被定义为一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状,即具有自相似的性质。它跟分数维、自组织、非线性系统和混沌等具有非常重要的联系。

    分形盒就是这样一种分形,它的定义如下:

    维度是1的分形盒:

    X

    维度是2的分形盒:

    X  X

      X

    X  X

    如果已知维度是(n-1)的分形盒,那么维度是n的分形盒的递归定义如下所示:

    Box(n-1)               Box(n-1)

                  Box(n-1)

    Box(n-1)               Box(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<cstring>
     3 #include<cmath>
     4 using namespace std;
     5 char a[2200][2200];
     6 void draw(int x, int y, int n){ //左上角为x,y,画一个层数为n的分型盒 
     7     if(n==0){
     8         a[x][y] = 'X';
     9         return;
    10     }
    11     draw(x,y,n-1); //左上 
    12     draw(x,y+2*pow(3,n-1),n-1);//右上
    13     draw(x+2*pow(3,n-1), y, n-1); //左下
    14     draw(x+2*pow(3,n-1), y+2*pow(3,n-1), n-1); //右下 
    15     draw(x+pow(3,n-1), y+pow(3,n-1), n-1); 
    16 }
    17 int main(){
    18     int n;
    19     while(1){
    20         memset(a,0,sizeof(0));
    21         cin>>n;
    22         if(n==-1) break;
    23         draw(1,1,n-1);
    24         for(int i = 1; i <= pow(3,n-1); i++){
    25             for(int j = 1; j <= pow(3,n-1); j++){
    26                 if(a[i][j]==0) cout<<" ";
    27                 else cout<<"X";
    28             }
    29             cout<<endl;
    30         }
    31         cout<<"-"<<endl;
    32     }
    33     return 0;
    34 }

    备注:我好了。本来我特别不会做这种画分型图的题。但其实只要找好层数和边长的关系,然后找到几个组成部分的左上顶点坐标,递归来画就可以。

    这道题,对于层数为n的分型箱,边长为pow(3,n-1)。所以我的draw的参数n实际上是n-1,0为边界条件。

    画分形图好解压QAQ

  • 相关阅读:
    【HDOJ1811】【并查集预处理+拓扑排序】
    【HDOJ1598】【枚举+最小生成树】
    【HDOJ图论题集】【转】
    第三周 Leetcode 4. Median of Two Sorted Arrays (HARD)
    POJ2985 The k-th Largest Group treap
    POJ 1056 IMMEDIATE DECODABILITY Trie 字符串前缀查找
    ZOJ2334 Monkey King 左偏树
    POJ2352 Stars 树状数组
    POJ2492 A Bug's Life 判断二分图
    POJ 3268 最短路应用
  • 原文地址:https://www.cnblogs.com/fangziyuan/p/13130166.html
Copyright © 2011-2022 走看看