Time Limit: 1000MS | Memory Limit: 30000KB | 64bit IO Format: %I64d & %I64u |
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
分治法画图
代码:
#include<iostream> #include<cstring> #include<cstdio> #include<map> #include<cstring> #include<algorithm> #define mem(a,b) memset(a,b,_sizeof(a)) using namespace std; typedef long long ll; typedef unsigned long long llu; const int maxd=1000+10; //--------------------- int n; char mz[maxd][maxd]; int _size[8]; void init(int len) { for(int i=0; i<len; ++i) { for(int j=0; j<len; ++j) mz[i][j]=' '; mz[i][len]='\0'; } } void draw(int n,int x,int y) { if(n==1) mz[x][y]='X'; else { draw(n-1,x,y); draw(n-1,x,y+_size[n-1]*2); draw(n-1,x+_size[n-1],y+_size[n-1]); draw(n-1,x+_size[n-1]*2,y); draw(n-1,x+_size[n-1]*2,y+_size[n-1]*2); } return; } int main() { freopen("1.txt","r",stdin); _size[0]=0; _size[1]=1; for(int i=2; i<=9; ++i) _size[i]=_size[i-1]*3; while(scanf("%d",&n)==1 && n!=-1) { init(_size[n]); draw(n,0,0); for(int i=0; i<_size[n]; ++i) { for(int j=0; j<_size[n]; ++j) printf("%c",mz[i][j]); printf("\n"); } printf("-\n"); } return 0; }
Time Limit: 1000MS | Memory Limit: 32768KB | 64bit IO Format: %I64d & %I64u |
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 Sierpinski fractal is defined as below:
- A Sierpinski fractal of degree 1 is simply
@
- A Sierpinski fractal of degree 2 is
@@@
- If using B(n-1) to represent the Sierpinski fractal of degree n-1, then a Sierpinski fractal of degree n is defined recursively as following
B(n-1)B(n-1)B(n-1)
Your task is to draw a Sierpinski 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 10. The last line of input is an integer 0 indicating the end of input.
Output
For each test case, output the Sierpinski fractal using the '@' notation. Print a blank line after each test case.
Don't output any trailing spaces at the end of each line, or you may get a PE!
Sample Input
120
Sample Output
@@@@
用已知的图形拼凑出现有的图形,用分治法,注意格式控制;
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<cstring>
#include<algorithm>
#define mem(a,b) memset(a,b,_sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long llu;
const int maxd=2000+10;
//---------------------
int n;
char mz[maxd][maxd];
int _size[12];
void init(int len)
{
for(int i=0; i<len; ++i)
{
for(int j=0; j<len; ++j)
mz[i][j]=' ';
mz[i][len]='\0';
}
}
void draw(int n,int x,int y)
{
if(n==1)
mz[x][y]='@';
else
{
draw(n-1,x,y);
draw(n-1,x+_size[n-1],y);
draw(n-1,x+_size[n-1],y+_size[n-1]);
}
return;
}
int main()
{
freopen("1.txt","r",stdin);
_size[0]=0;
_size[1]=1;
for(int i=2; i<=12; ++i)
_size[i]=_size[i-1]*2;
while(scanf("%d",&n)==1 && n)
{
init(_size[n]);
draw(n,0,0);
for(int i=0; i<_size[n]; ++i)
{
for(int j=_size[n]-1; j>=0; --j)
if(mz[i][j]=='@') {mz[i][j+1]='\0';break;}
puts(mz[i]);
}
printf("\n");
}
return 0;
}