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 :
- 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:
@
@@@
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; }