1. 程式人生 > >p1498南蠻圖騰 謝爾賓斯基三角形 分形

p1498南蠻圖騰 謝爾賓斯基三角形 分形

p1498南蠻圖騰 謝爾賓斯基三角形

//規律就是以最小圖騰為基本單位,
//先向右複製一個,再向上覆制一個
//比如第一個就是這樣組成一個小三角形,第二個就是這樣組成了一個大三角形


/*
        第一個圖形倒著存入
         /\       /__\
        /__\       /\

*/ 
#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
               /\
              /__\
             /\  /\
            /__\/__\
           /\      /\
          /__\    /__\
         /\  /\  /\  /\
        /__\/__\/__\/__\
       /\              /\
      /__\            /__\
     /\  /\          /\  /\
    /__\/__\        /__\/__\
   /\      /\      /\      /\
  /__\    /__\    /__\    /__\
 /\  /\  /\  /\  /\  /\  /\  /\
/__\/__\/__\/__\/__\/__\/__\/__\
*/