POJ-2083フラクタル-Xスターダイアグラム

説明

フラクタルは、すべてのスケールで、やや技術的な意味で、自己相似性を表示するオブジェクトまたは量です。オブジェクトは必要はありません

すべてのスケールで正確に同じ構造を示すが、構造体の同じ「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;
    }
}

おすすめ

転載: www.cnblogs.com/lqhsr/p/11265623.html