洛谷P1498 南蛮图腾
洛谷P1498 南蛮图腾
直接上题解了, 递归+分治
1 #include <stdio.h> 2 #include <string.h> 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<P2[N+1];++wia) 29 { 30 for(wib=1;wib<=P2[N+1];++wib) 31 putchar(Map[wia][wib]); 32 putchar('\n'); 33 } //费劲的一个一个输出完成图 34 return 0; 35 }