📄 p2083.cpp
字号:
#include <iostream>
using namespace std;
string f[8][2187];
int po[8];
int main(){
po[0] = 1;
for(int i = 1;i < 8;++i){
po[i] = po[i-1] * 3;
for(int j = 0;j < po[i];++j)
f[i][j].resize(po[i],' ');
}
f[0][0] = "X";
for(int i = 1;i < 8;++i){
for(int j = 0;j < po[i];++j){
if(j < po[i-1]){
for(int k = 0;k < po[i-1] && k < f[i-1][j].size();++k)
f[i][j][k] = f[i-1][j][k];
for(int k = 2*po[i-1];k < 3*po[i-1] && k-2*po[i-1] < f[i-1][j].size();++k)
f[i][j][k] = f[i-1][j][k-2*po[i-1]];
}
if(j >= po[i-1] && j < 2*po[i-1])
for(int k = po[i-1];k < 2*po[i-1] && k-po[i-1] < f[i-1][j-po[i-1]].size();++k)
f[i][j][k] = f[i-1][j-po[i-1]][k-po[i-1]];
if(j >= 2*po[i-1]){
for(int k = 0;k < po[i-1] && k < f[i-1][j-2*po[i-1]].size();++k)
f[i][j][k] = f[i-1][j-2*po[i-1]][k];
for(int k = 2*po[i-1];k < 3*po[i-1] && k-2*po[i-1] < f[i-1][j-2*po[i-1]].size();++k)
f[i][j][k] = f[i-1][j-2*po[i-1]][k-2*po[i-1]];
}
int k;
for(k = f[i][j].size()-1;k >= 0 && f[i][j][k] == ' ';--k);
f[i][j].erase(k+1,f[i][j].size()-k);
}
}
int n;
scanf("%d",&n);
while(n != -1){
for(int i = 0;i < po[n-1];++i)
printf("%s\n",f[n-1][i].c_str());
puts("-");
scanf("%d",&n);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -