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 :
Your task is to draw a box fractal of degree n.
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 - 打印图形的题目,递归处理; 我遇到的困难:对于空格的处理,处理的不是很好; 无奈智商压制只好用笨方法了: 代码: /* 注:代码中的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; }