Fractal
Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 18196 Accepted: 7509
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
Source
Shanghai 2004 Preliminary
还是讲课 递归的例题,,,,分治可能更合适
写代码的时候想直接输出 但是发现多行的空格并不好输出,所以还是二位数组标记,然后输出数组就好了
//POJ 2083 ZOJ 2423
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
// 这个题我觉得更可能是分治 当初分治就没咋学 现在补吧
using namespace std;
char map[1021][1201];
void print(int n,int x,int y) {
if(n == 1) { map[x][y] = 'X'; return ; }
int m = pow(3.0,n - 2);
print(n - 1,x,y);// 左上角
print(n - 1,x,y + 2 * m);// 右上角
print(n - 1,x + m, y + m);// 中间
print(n - 1,x + 2 * m,y);// 左下角
print(n - 1,x + 2 * m,y + 2 * m);// 右下角
}
int main(int argc,char* argv[]) {
int n;
while(scanf("%d",&n) == 1) {
if(n == -1) break;
memset(map,' ',sizeof(map));
print(n,1,1);
int m = pow(3.0,n - 1);
for(int i=1; i<=m; i++){
for(int j=1; j<=m; j++)
printf("%c",map[i][j]);
printf("\n");
}
printf("-\n");
}
return 0;
}
刚开始交的时候 CE了,本地并没有问题哪位大佬指点迷津,CE信息如下
Main.cpp
F:\temp\21815787.242778\Main.cpp(1) : error C2143: syntax error : missing ';' before '+'
F:\temp\21815787.242778\Main.cpp(1) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int