説明
フラクタルは、すべてのスケールで、やや技術的な意味で、自己相似性を表示するオブジェクトまたは量です。オブジェクトは必要はありません
すべてのスケールで正確に同じ構造を示すが、構造体の同じ「type」は、すべてのスケールで表示される必要があります。
ボックスフラクタルは、以下のように定義されます。
次数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」表記を使用して出力ボックスフラクタル。「X」は大文字であることに注意してください。ラインを印刷
各テストケースの後にのみ、単一のダッシュ。
サンプル入力
1
2
3
4
-1
例
入力
3
2 3 2
2
3 2
2 3
出力
X
-
X X
X
X X
-
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
-
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
-
分析
一つのトピックはに意図されたプリントグラフィックス:
実際には、それは、それぞれ、右上、左下、右下にグラフィックを削除し、[OK]をもう一度それをコピーして貼り付けることです
しかし、実際には出力スペースに使用私はWA 3ラウンドにつながりました。。。
コード
それは本当に水です。。。
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
int n,cnt[100];
char co[1000][1000];
void copy(int k,int x,int y){
for(int j=1;j<=cnt[k-1];j++){
for(int l=cnt[k-1]*2+1;l<=cnt[k];l++){//右上
co[j][l]=co[j][l-cnt[k-1]*2];
}
}
for(int j=cnt[k-1]+1;j<=cnt[k-1]*2;j++){//中间
for(int l=cnt[k-1]+1;l<=cnt[k-1]*2;l++){
co[j][l]=co[j-cnt[k-1]][l-cnt[k-1]];
}
}
for(int j=cnt[k-1]*2+1;j<=cnt[k];j++){//左下
for(int l=1;l<=cnt[k-1];l++){
co[j][l]=co[j-cnt[k-1]*2][l];
}
}
for(int j=cnt[k-1]*2+1;j<=cnt[k];j++){//右下
for(int l=cnt[k-1]*2+1;l<=cnt[k];l++){
co[j][l]=co[j-cnt[k-1]*2][l-cnt[k-1]*2];
}
}
}
int main(){
cnt[0]=cnt[1]=1;
for(int i=2;i<=10;i++)cnt[i]=cnt[i-1]*3;
while(cin>>n){
memset(co,' ',sizeof(co));
if(n==-1)return 0;
co[1][1]='X';
for(int i=2;i<=n;i++){
copy(i,cnt[i],cnt[i]);
}
for(int i=1;i<=cnt[n];i++){
for(int j=1;j<=cnt[n];j++){
cout<<co[i][j];
}
cout<<endl;
}
cout<<"-"<<endl;
}
}