【遞歸】分形
阿新 • • 發佈:2018-01-28
++ 幾何 isp space sed hide 表示 std event
盒型分形定義如下: 度數為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的盒型分形。
題目描述
分形,具有以非整數維形式充填空間的形態特征。通常被定義為“一個粗糙或零碎的幾何形狀,可以分成數個部分,且每一部分都(至少近似地)是整體縮小後的形狀”,即具有自相似的性質。盒型分形定義如下: 度數為1的分形為: X 度數為2的分形為: X X X X X 如果用B(n-1)代表度數為n-1的盒型分形,則度數為n的盒型分形可以遞歸的定義為: B(n-1) B(n-1) B(n-1)
輸入
輸入包含多個測試數據,每個測試數據占一行,包含一個正整數n,(n<=7)。輸入最後一行為-1,表示結束。輸出
對每個測試數據,用X表示輸出的盒型,每個測試數據對應的輸出結果後輸出一串"----------",每行的末尾不要輸出任何多余的空格,否則得到的是格式錯誤的結果。樣例輸入
1
2
3
4
-1
樣例輸出
X ---------- X X X X X ---------- X X X X X X X X X X X X X X X X X X X X X X X X X ---------- X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X ----------
1 #include <iostream> 2 #include <bits/stdc++.h> 3 using namespace std; 4 char mapp[800][800]; //記錄圖形 5 void solve(int n,int x,int y) 6 { 7 if(n==1) 8 { 9 mapp[x][y]=‘X‘; 10 } 11 else 12 { 13 int sizee=pow(3.0,n-2);View Code14 solve(n-1,x,y); //遞歸 15 solve(n-1,x+sizee*2,y); 16 solve(n-1,x+sizee,y+sizee); 17 solve(n-1,x,y+sizee*2); 18 solve(n-1,x+sizee*2,y+sizee*2); 19 } 20 } 21 int main() 22 { 23 int n; 24 while(cin>>n) 25 { 26 if(n==-1) 27 break; 28 int m=pow(3.0,n-1); //m為圖形大小 29 for(int i=0;i<m;i++) 30 { 31 for(int j=0;j<m;j++) 32 mapp[i][j]=‘ ‘; //初始化 33 } 34 for(int i=0;i<m;i++) 35 { 36 mapp[i][m]=‘\0‘; 37 } 38 solve(n,0,0); 39 for(int i=0;i<m;i++) 40 { 41 for(int j=m-1;j>=0;j--) 42 { 43 if(mapp[i][j]==‘X‘) //若為X則該行遍歷結束 44 break; 45 else if(mapp[i][j]!=‘X‘) //若非X則賦為‘\0‘ 46 mapp[i][j]=‘\0‘; 47 } 48 } 49 for(int i=0;i<m;i++) 50 printf("%s\n",mapp[i]); 51 printf("----------\n"); 52 } 53 return 0; 54 }
【遞歸】分形