zoukankan      html  css  js  c++  java
  • 中石油【递归】分形 已提交

    问题 C: 【递归】分形

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 48  解决: 17
    [提交][状态][讨论版]

    题目描述

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


    盒型分形定义如下:
    度数为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
    ----------
    思路:注意每一行的末尾都不能有空格,不然会格式错误。
        x,y表示每一个图的左上角的坐标。
    代码:
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    
    using namespace std;
    
    char a[730][730];
    
    void b(int n,int x,int y){
        if(n==1){
            a[x][y]='X';
        }else{
            int m=pow(3,n-2);
            b(n-1,x,y);
            b(n-1,x,y+2*m);
            b(n-1,x+m,y+m);
            b(n-1,x+2*m,y);
            b(n-1,x+2*m,y+2*m);
        }
    }
    
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF&&n!=-1){
            memset(a,' ',sizeof(a));
            b(n,1,1);
            //每行末尾的空格去掉
            for(int i=1;i<pow(3,n-1);i++){
                for(int j=pow(3,n-1);j>1;j--){
                    if(a[i][j]!='X'){
                        a[i][j]='';
                    }else{
                        break;
                    }
                }
            }
            //输出图像
            for(int i=1;i<=pow(3,n-1);i++){
                for(int j=1;j<=pow(3,n-1);j++){
                    if(a[i][j]!=''){
                        printf("%c",a[i][j]);
                    }
                }
                printf("
    ");
            }
            printf("----------
    ");
        }
        return 0;
    }
    View Code


  • 相关阅读:
    Oracle查看正在执行的存储过程的sid---转
    使用WITH子句重用子查询
    oracle解决显示数据的层次问题--实现数据缩进
    oracle9i、10g、11g区别 --转
    oracle10g安装在裸设备上
    在Linux系统上面创建使用裸设备的数据库
    监控Oracle数据库的常用shell脚本-转
    sql server使用维护计划定时备份完整数据库、差异数据库
    使用Advanced Installer14.3 简单打包windows窗体应用程序
    SVG Path标签 A 参数
  • 原文地址:https://www.cnblogs.com/TWS-YIFEI/p/5658123.html
Copyright © 2011-2022 走看看