洛谷P1498 南蛮图腾
直接上题解了, 递归+分治
1 #include2 #include 3 int P2[]={ 1,2,4,8,16,32,64,128,256,512,1024,2048}; //简化了math.h的pow函数 4 char Map[2049][2049]; //整个的缓冲图 5 int N; 6 void Pt1(int pyh,int pyl) //在偏移上打印最基本的三角形 7 { 8 Map[pyh][pyl]='/'; 9 Map[pyh][pyl+1]='\\';10 Map[pyh+1][pyl-1]='/';11 Map[pyh+1][pyl+2]='\\';12 Map[pyh+1][pyl]='_';13 Map[pyh+1][pyl+1]='_';14 }15 void Divide(int py1,int py2,int n) //分治16 {17 if(n==1){Pt1(py1,py2);return;} //只有一层就打印退出18 Divide(py1,py2,n-1); 19 Divide(py1+P2[n-1],py2-P2[n-1],n-1);20 Divide(py1+P2[n-1],py2+P2[n-1],n-1);//反之则分裂成三个继续递归21 }22 int main()23 {24 scanf("%d",&N);25 memset(Map,' ',sizeof(Map)); //全设为空格,因为是char所以用memset可以实现26 Divide(0,P2[N],N);27 int wia,wib;28 for(wia=0;wia