파팅 형상(반복)

17540 단어

Description


분형은 비정수적 형식으로 공간을 충전하는 형태 특징을 가지고 있다.보통'조잡하거나 자질구레한 기하학적 형상으로 정의되어 있으며, 여러 부분으로 나눌 수 있으며, 각 부분은 전체적으로 축소된 형상이다', 즉 유사한 성질을 가지고 있다.
세그먼트 블록은 다음과 같이 정의할 수 있습니다.
  • 도수가 1인 분형 블록은 다음과 같다

  • X
  • 도수가 2인 분형 블록은 다음과 같다

  • X X XX X
  • 만약에 B(n-1)로 도수가 n-1인 분형 블록을 표시한다면 도수가 n인 분형 블록은 다음과 같은 형식으로 귀속적으로 정의할 수 있다
  • B(n - 1)        B(n - 1)
    
            B(n - 1)
    
    B(n - 1)        B(n - 1)

    당신의 임무는 도수가 n인 분형 블록을 그리는 것입니다!

    Input


    입력은 여러 개의 테스트 샘플을 포함하고 모든 테스트 샘플은 7을 넘지 않는 정수이며 -1로 입력이 끝났다는 것을 나타낸다.

    Output


    모든 테스트 샘플에 대해 대문자'X'로 분형 상자의 요소를 표시하고 도수의 요구에 따라 분형 블록을 출력한다.각 세그먼트 블록은 출력이 끝나면 대시 (-) 로 구분됩니다.

    Sample Input

    1
    2
    3
    4
    -1

    Sample Output

    X
    -
    X X
     X
    X X
    -
    X X   X X
     X     X
    X X   X X
       X X
        X
       X X
    X X   X X
     X     X
    X X   X X
    -
    X X   X X         X X   X X
     X     X           X     X
    X X   X X         X X   X X
       X X               X X
        X                 X
       X X               X X
    X X   X X         X X   X X
     X     X           X     X
    X X   X X         X X   X X
             X X   X X
              X     X
             X X   X X
                X X
                 X
                X X
             X X   X X
              X     X
             X X   X X
    X X   X X         X X   X X
     X     X           X     X
    X X   X X         X X   X X
       X X               X X
        X                 X
       X X               X X
    X X   X X         X X   X X
     X     X           X     X
    X X   X X         X X   X X
    -

    HINT


    !출력 데이터에는 줄 뒤에 공백이 있습니다.출력 형식 제어에 주의하세요!
     
     
     
     
      1 #include 
      2 #include <string.h>
      3 #include 
      4 #include <string>
      5 #include 
      6 #include 
      7 #include 
      8 #include 
      9 #include 
     10 #include <set>
     11 #include 
     12 #include 
     13 const int INF=0x3f3f3f3f;
     14 typedef long long LL;
     15 const int mod=1e9+7;
     16 //const double PI=acos(-1);
     17 #define Bug cout< 18 const int maxn=1e5+10;
     19 using namespace std;
     20 
     21 void PT(int n)// n  
     22 {
     23     for(int i=0;i)
     24         printf(" ");
     25 }
     26 
     27 void F(int n,int L,int flag)//n ,L ,flag 1 ( ),flag 0  
     28 {
     29     if(n==1)
     30         printf("X");
     31     else
     32     {
     33         if(L<=pow(3,n-1)/3)
     34         {    
     35             if(flag)
     36                 F(n-1,L,flag);
     37             else
     38                 F(n-1,L,!flag);
     39             PT(pow(3,n-2));
     40             F(n-1,L,flag);
     41         }
     42         else if(L<=2*pow(3,n-1)/3)
     43         {
     44             PT(pow(3,n-2));
     45             F(n-1,L%(int)(pow(3,n-1)/3),flag);
     46             if(flag)
     47             PT(pow(3,n-2));        
     48         }
     49         else
     50         {
     51             if(flag)
     52                 F(n-1,L%(int)(pow(3,n-1)/3),flag);
     53             else
     54                 F(n-1,L%(int)(pow(3,n-1)/3),!flag);
     55             PT(pow(3,n-2));
     56             F(n-1,L%(int)(pow(3,n-1)/3),flag);
     57         }
     58     }
     59 }
     60 
     61 void Solve(int n) 
     62 {
     63     if(n==1)
     64     {
     65         printf("X");
     66         return ;
     67     }
     68     for(int i=1;i<=pow(3,n-1)/3;i++)
     69     {
     70         F(n-1,i,1);
     71         PT(pow(3,n-2));
     72         F(n-1,i,0);
     73         printf("
    "); 74 } 75 for(int i=1;i<=pow(3,n-1)/3;i++) 76 { 77 PT(pow(3,n-2)); 78 F(n-1,i,0); 79 printf("
    "); 80 } 81 for(int i=1;i<=pow(3,n-1)/3;i++) 82 { 83 F(n-1,i,1); 84 PT(pow(3,n-2)); 85 F(n-1,i,0); 86 printf("
    "); 87 } 88 } 89 90 int main() 91 { 92 int n; 93 while(~scanf("%d",&n)&&n!=-1) 94 { 95 if(n==1) 96 printf("X
    "); 97 else Solve(n); 98 printf("-
    "); 99 } 100 return 0; 101 }

    좋은 웹페이지 즐겨찾기