p1498南蠻圖騰 謝爾賓斯基三角形 分形
阿新 • • 發佈:2019-01-06
//規律就是以最小圖騰為基本單位, //先向右複製一個,再向上覆制一個 //比如第一個就是這樣組成一個小三角形,第二個就是這樣組成了一個大三角形 /* 第一個圖形倒著存入 /\ /__\ /__\ /\ */ #include<cstdio> #include<iostream> #include<cstring> const int max1=1026; const int max2=2050; using namespace std; char pic[max1][max2];//圖騰陣列 ,算了一下最大是1024 2048 ,用全域性變數 int main() { int n;//題目中給的n代表圖騰大小 scanf("%d",&n); memset(pic,' ',sizeof(pic));//這一句一定要加,不然會爆0 pic[0][0]=pic[1][1]='/';//代表0行0列,1行1列 pic[0][1]=pic[0][2]='_';//代表0行1列,0行兩列 pic[0][3]=pic[1][2]='\\';//轉義字元 //發現每次向右複製一次,向上複製一次即可,這算一次, //n為2的時候,這個週期進行一次,n為3的時候這個週期進行2次 ,n-1次 int wide=4;//初始寬度為4,初始高度為它的一半 for(int k=1;k<=n-1;k++)//複製n-1次 { for(int i=0;i<wide/2;i++)//高度 { for(int j=0;j<wide;j++)//寬度 { pic[i][j+wide]=pic[i][j];//向右複製 pic[i+(wide/2)][j+(wide/2)]=pic[i][j];//向下複製,因為要倒序輸出 //cout<<pic[i][j]; } //printf("\n"); } wide*=2;//每次擴大兩倍 } for(int i=(wide/2)-1;i>=0;i--)//高度 { for(int j=0;j<wide;j++) cout<<pic[i][j]; printf("\n"); } return 0; } /* 4 /__\ /\ /__\/__\ /\ /\ /__\ /\ 上面的圖形其實不用管,因為這是三個for迴圈中第一個for迴圈 接下來就是複製三次然後倒過來 /__\/__\/__\/__\ /\ /\ /\ /\ /__\ /__\ /\ /\ /__\/__\ /\ /\ /__\ /\ 4 /\ /__\ /\ /\ /__\/__\ /\ /\ /__\ /__\ /\ /\ /\ /\ /__\/__\/__\/__\ /\ /\ /__\ /__\ /\ /\ /\ /\ /__\/__\ /__\/__\ /\ /\ /\ /\ /__\ /__\ /__\ /__\ /\ /\ /\ /\ /\ /\ /\ /\ /__\/__\/__\/__\/__\/__\/__\/__\ */