1106: Fractal
Time Limit: 1 Sec Memory Limit: 30 MBSubmit: 38 Solved: 20
[ Submit][ Status][ Web Board]
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
-
HINT
Source
#include<cstdio>
#include<iostream>
#include<string.h>
#include<algorithm>
const int N=255;
using namespace std;
void pf(int n,int a,int right){
int i=1;
int j=0;
if(n==1)cout<<"X";
else if(n>1&&a==-1){
for(j=0;j<pow(3.0,(n-2));j++){
pf(n-1,j,0);
for(i=0;i<pow(3.0,(n-2));i++){
cout<<" ";
}
pf(n-1,j,0);
cout<<endl;
}
for(j=0;j<pow(3.0,(n-2));j++){
for(i=0;i<pow(3.0,(n-2));i++){
cout<<" ";
}
pf(n-1,j,0);
for(i=0;i<pow(3.0,(n-2));i++){
cout<<" ";
}
cout<<endl;
}
for(j=0;j<pow(3.0,(n-2));j++){
pf(n-1,j,0);
for(i=0;i<pow(3.0,(n-2));i++){
cout<<" ";
}
pf(n-1,j,0);
cout<<endl;
}
}
else if(n>1&&a!=-1){
if(a<pow(3.0,(n-2))){
pf(n-1,a,0);
for(i=0;i<pow(3.0,(n-2));i++){
cout<<" ";
}
pf(n-1,a,0);
}
else if(a>=pow(3.0,(n-1))-pow(3.0,(n-2))){
pf(n-1,a%(int)pow(3.0,(n-2)),0);
for(i=0;i<pow(3.0,(n-2));i++){
cout<<" ";
}
pf(n-1,a%(int)pow(3.0,(n-2)),0);
}
else{
for(i=0;i<pow(3.0,(n-2));i++){
cout<<" ";
}
pf(n-1,a%(int)pow(3.0,(n-2)),right);
for(i=0;i<pow(3.0,(n-2));i++){
cout<<" ";
}
}
}
}
int main(){
int n=0;
int i=0;
int label=1;
int j=0;
while(cin>>n){
if(n==-1)return 0;
if(n==1)cout<<"X"<<endl<<"-"<<endl;
else {
pf(n,-1,0);
cout<<"-"<<endl;
}
}
}
if you don't want the blank on the right ,you can change pf(a,b,c) ,c to 1;