1、链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2291
2、解法:递归调用 n-1的图形去打印 n 。
如图所示,依靠相对坐标去打印C
3、代码
#include<iostream> #include<stdio.h> #include<math.h> #include<string.h> using namespace std; char a[2200][2200]; int powlen(int x , int n) { int s = 1; for(int i = 0 ; i < n; i++) { s *= x; } return s; } void Print(int n , int x , int y) { if(n == 0) { a[x][y] = 'C'; return ; } int len = pow(3,n-1); Print(n-1, x+len, y); Print(n-1, x+2*len,y); Print(n-1, x, y+len); Print(n-1, x+len, y+2*len); Print(n-1, x+2*len,y+2*len); } int main() { int t , n; scanf("%d",&t); while(t--) { memset(a,' ',sizeof(a)); scanf("%d",&n); int len = powlen(3,n); Print(n,1,1); for(int i = 1; i <= len; i++) { int sum; for(int j = 1; j <= len; j++) { if(a[j][i] == 'C') //处理多余的空格 { sum = j; } } for(int j = 1 ;j <=sum; j++) { printf("%c",a[j][i]); } printf("\n"); } } return 0; }