題目連結 POJ
題目連結 ZOJ
題目連結 OpenJ_Bailian
題目連結 FZU1306
- 題意:令 B(1)=X,B(n)=
,求 B(n),(1≤n≤7)
- 題解:先找出中心點,再從中心點遞迴到 B(n−1) 的中心點,n=1 時就在該位置填 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
63
64
65
66
67
using namespace std;
const int N = 731;
char ans[N][N];
void print(int n, int x, int y)
{
if (n == 1)
{
ans[x][y] = 'X';
return;
}
int m = pow(3.0, n - 2);
print(n - 1, x, y);
print(n - 1, x + m, y + m);
print(n - 1, x + 2 * m, y + 2 * m);
print(n - 1, x, y + 2 * m);
print(n - 1, x + 2 * m, y);
}
int main()
{
int n;
while (cin >> n, n != -1)
{
int m = pow(3.0, n - 1);
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < m; ++j)
{
ans[i][j] = ' ';
}
}
print(n, 0, 0);
for (int i = 0; i < m; ++i)
{
for (int j = m - 1; j >= 0; --j)
{
if (ans[i][j] == ' ')
{
ans[i][j] = '*';
}
else
{
break;
}
}
}
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < m; ++j)
{
if (ans[i][j] == '*')
{
break;
}
printf("%c", ans[i][j]);
}
printf("\n");
}
printf("-\n");
}
}
如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)