poj 2083 Factal

来源:互联网 发布:农村淘宝快递网点查询 编辑:程序博客网 时间:2024/06/07 10:49

Fractal
Time Limit: 1000MS Memory Limit: 30000KTotal Submissions: 9989 Accepted: 4584

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 

  • A box fractal of degree 2 is 
    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-

其他的可以不看,直接看样例,递归打印图形。



#include<stdio.h>#include<string.h>#include<string>#include<algorithm>#include<cmath>#include<iostream>#define maxsize 800using namespace std;//int Mypow(int x,int y)//{//    return (int)pow(x,y);//}int Mypow[]= {1,3,9,27,81,243,729,2187};char s[maxsize][maxsize];void print(int n,int x,int y)//分形打印{    if(n==1)    {        s[x][y]='X';        return ;    }//如n==1直接s[x][y]='X'    //如果不是就分别打印    else if(n>1)    {        int m=Mypow[n-2];        print(n-1,x,y);//左上角        print(n-1,x+2*m,y);//右上角        print(n-1,x+m,y+m);//中间        print(n-1,x,y+2*m);//左下角        print(n-1,x+2*m,y+2*m);//右下角    }}int main(){    int n,i,j;    while(scanf("%d",&n)!=EOF)    {        if(n==-1)break;        int sizex,sizey;        sizex=sizey=Mypow[n-1];        for(i=0; i<sizex; ++i)        {            for(j=0; j<sizey; ++j)            {                s[i][j]=' ';            }        }       // memset(s,0,sizeof(s));        print(n,0,0);        for(i=0; i<sizex; i++)        {//            for(j=0; j<sizey; j++)//                printf("%c",s[i][j]);            //不要像上面这样写,都则会超时            s[i][sizex]='\n';            s[i][sizex+1]='\0';            printf("%s",s[i]);        }        printf("-\n");    }    return 0;}


原创粉丝点击