您的位置:首页 > 其它

POJ 2083 Fractal 递归

2015-08-07 20:00 531 查看
Fractal

Time Limit: 1000MSMemory Limit: 30000K
Total Submissions: 8060Accepted: 3862
Description

A fractal is an object or quantity that displays self-similarity, in a somewhat technical sense, on all scales. The object need not exhibit exactly the same structure at all scales, but the same "type" of structures must appear on all scales.

A box fractal is defined as below :

A box fractal of degree 1 is simply

X

A box fractal of degree 2 is

X X

X

X X

If using B(n - 1) to represent the box fractal of degree n - 1, then a box fractal of degree n is defined recursively as following

B(n - 1)        B(n - 1)

        B(n - 1)

B(n - 1)        B(n - 1)


Your task is to draw a box fractal of degree n.
Input

The input consists of several test cases. Each line of the input contains a positive integer n which is no greater than 7. The last line of input is a negative integer −1 indicating the end of input.
Output

For each test case, output the box fractal using the 'X' notation. Please notice that 'X' is an uppercase letter. Print a line with only a single dash after each test case.
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
-

Source
Shanghai 2004 Preliminary
AC代码:
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
char map[1000][1000];
void dg(int n,int x,int y){
    if(n==1){
        map[x][y]='X';
        return;
    }
    int m=pow(3,n-2);
    dg(n-1,x,y);
    dg(n-1,x,y+2*m);
    dg(n-1,x+m,y+m);
    dg(n-1,x+2*m,y);
    dg(n-1,x+2*m,y+2*m);
}
int main(){
    int n;
    while(cin>>n&&n!=-1){
        if(n==1){
            cout<<"X\n-\n";
            continue;
        }
        int m=pow(3,n-1);//cout<<"m: "<<m<<'\12';
        for(int i=0;i<m;++i){
            for(int j=0;j<m;++j)
                map[i][j]=' ';
            map[i][m]='\0';
        }
        dg(n,0,0);
        for(int i=0;i<m;++i)
            cout<<map[i]<<'\12';
        cout<<"-\n";
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: