题目如题
C++ 代码
#include <iostream>
using namespace std;
const int N = 730; // 3 ^ (7 - 1) = 729
int g[N][N], n;
int qmi(int a, int b) {
int ans = 1;
for(; b; b >>= 1) {
if(b & 1) ans = ans * a;
a *= a;
}
return ans;
}
void calc(int n, int x, int y) {
if(n == 0) {
g[x][y] = 1;
return;
}
int len = qmi(3, n - 1); // 偏移的单位长度
for(int i = 0; i < 5; i++) {
if(i == 0) calc(n - 1, x, y);
if(i == 1) calc(n - 1, x + 2 * len, y);
if(i == 2) calc(n - 1, x + len, y + len);
if(i == 3) calc(n - 1, x, y + 2 * len);
if(i == 4) calc(n - 1, x + 2 * len, y + 2 * len);
}
}
int main() {
while(cin >> n && n > -1) {
calc(n - 1, 0, 0); // n对应的分级图的编号为n - 1
for(int i = 0; i < qmi(3, n - 1); i++) {
for(int j = 0; j < qmi(3, n - 1); j++)
if(g[i][j]) cout<<"X";
else cout<<" ";
puts("");
}
puts("-");
}
return 0;
}