Fractal poj 2083

来源:互联网 发布:四川遂宁广电网络 编辑:程序博客网 时间:2024/05/18 17:42
C - Fractal(3.4.1)
点击打开题目链接
Time Limit:1000MS    Memory Limit:30000KB    64bit IO Format:%I64d & %I64u
SubmitStatus

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

1234-1

Sample Output

X-X X XX X-X X   X X X     XX X   X X   X X    X   X XX X   X X X     XX X   X X-X X   X X         X X   X X X     X           X     XX X   X X         X X   X X   X X               X X    X                 X   X X               X XX X   X X         X X   X X X     X           X     XX X   X X         X X   X X         X X   X X          X     X         X X   X X            X X             X            X X         X X   X X          X     X         X X   X XX X   X X         X X   X X X     X           X     XX X   X X         X X   X X   X X               X X    X                 X   X X               X XX X   X X         X X   X X X     X           X     XX X   X X         X X   X X-打印图形的题目,递归处理;我遇到的困难:对于空格的处理,处理的不是很好;快哭了无奈智商压制只好用笨方法了:代码:/*注:代码中的k是指图形的大小为k*k的;*/
#include <iostream>#include <string.h>#include<stdio.h>#include <math.h>using namespace std;char map[1000][1000];void printspace(int n,int x,int y)//补空格{    //int Y;    int i,j,k=int(pow(3.0,n-2));    for(j=x; j<k+x; j++)    {        for(i=y-1;i>=0;i--)//两个图形之间补空格(从当前位置向前找)        {            if(map[j][i]!='X'&&map[j][i]=='\0')            {                map[j][i]=32;            }            else if(map[j][i]=='X')            break;        }        for(i=y; i<k+y; i++)//(从当前位置向后找)        {            map[j][i]=32;        }    }    //fillespace(n-1,x,y-k);}void print(int n,int x,int y){    int k=int(pow(3.0,n-2));    if(n==1)    {        map[x][y]='X';    }    else    {        print(n-1,x,y);//递归画出左上角的图形        printspace(n,x,y+k);//填写空格        print(n-1,x,y+2*k);//右上角        printspace(n,x+k,y);//空格        print(n-1,x+k,y+k);//中间的图形        print(n-1,x+2*k,y);//左下角        printspace(n,x+2*k,y+k);//空格        print(n-1,x+2*k,y+2*k);//右下角图形    }}int main(){    int n,k,l;//j;    //freopen("\\input.txt","r",stdin);   // freopen("\\output.txt","w",stdout);    while(cin>>n&&n!=-1)    {        memset(map,'\0',sizeof(map[0])*1000);        k=int(pow(3.0,n-1));        print(n,0,0);        for(l=0; l<k; l++)        {            //for(j=0;j<k;j++)            cout<<map[l];            cout<<endl;        }        cout<<"-"<<endl;    }    return 0;}


0 0
原创粉丝点击