分治与递归-分型

问题描述

分形在一定的技术意义上说,是在所有标度显示自相似性的一个对象或数量。对象不必在所有标度上展示完全相同的结构,但在所有标度上显示同样的结构“类型”。
分型块的定义如下: 次数是1的分型块只是:
X
次数2的分型块是:

X X
 X 
X X

如果利用B(n-1)表示次数是n-1的分型块,那么次数是n的分型块递归定义如下:

B(n-1)        B(n-1)
       B(n-1)
B(n-1)        B(n-1)

你的任务是画一个次数是n的分型块。

输入

输入有多组测试数据。每行有一个不大于7的正整数n 。最后一行的一个负整数-1表示输入结束。

输出

对每组测试数据,输出用大写字母‘X’标记的分型块。每组测试数据后输出一个破折号。

输入样例

1
2
3
4
-1

输出样例

X
-
X X
 X
X X
-
X X   X X
 X     X
X X   X X
   X X
    X
   X X
X X   X X
 X     X
X X   X X
-
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
   X X               X X
    X                 X
   X X               X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
         X X   X X
          X     X
         X X   X X
            X X
             X
            X X
         X X   X X
          X     X
         X X   X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
   X X               X X
    X                 X
   X X               X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package dynamic.plan;

import java.util.Scanner;

public class Fractal {

private int[][] arr;
private int length;

private void B(int x,int y, int n) {
if (n == 1) {
System.out.print("X");
}else if ( n==2 ) {
arr[x][y] = 1;
arr[x-1][y-1] = 1;
arr[x+1][y-1] = 1;
arr[x-1][y+1] = 1;
arr[x+1][y+1] = 1;
} else {
B(x, y, n-1);
int tmp = (int) Math.pow(3, n-2);
B(x-tmp, y-tmp, n-1);
B(x-tmp, y+tmp, n-1);
B(x+tmp, y-tmp, n-1);
B(x+tmp, y+tmp, n-1);
}
}

public void exe(int n) {
length = (int) Math.pow(3, n-1);
arr = new int[length][length];
B(length/2, length/2, n);

for(int i=0; i<length; i++){
for(int j=0; j<length; j++){
if (arr[i][j] == 1) {
System.out.print("X");
}else {
System.out.print(" ");
}
}
System.out.println();
}
}

public static void main(String[] args) {
Fractal f = new Fractal();
int[] a = new int[8];
Scanner in = new Scanner(System.in);
int n = in.nextInt();
while(n>0 && n<8){
a[n] = 1;
n = in.nextInt();
}
for(int i=1; i<8; i++){
if (a[i] == 1) {
f.exe(i);
System.out.println("-");
}
}
}
}

欢迎关注我的其它发布渠道