POJ 2083 Fractal
题意:打印字母X
n=1
X
n=2
X X
X
X X
对于给出的n,输出打印机n层打印结果( n<=7 ),输入多组数据,输入以 -1 结束
每组数据输出完毕,下行输出一个 "-"。
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <stdio.h> 5 #define rep(i,a,b) for(int i=(a);i<=(b);++i) 6 #define per(i,a,b) for(int i=(a);i>=(b);++i) 7 using namespace std; 8 const int N=1e3+7;; 9 char a[N][N]; 10 int Increase(int b) //求行数 11 { 12 int ans=1,x=3; 13 while(b) 14 { 15 if(b&1) ans*=x; 16 b>>=1; 17 x*=x; 18 } 19 return ans; 20 } 21 void dfs(int dep, int x,int y) 22 { 23 if(dep==1) 24 { 25 a[x][y]='X'; 26 return; 27 } 28 int z=Increase(dep-2); //求递增行数 29 dfs(dep-1,x,y); //左上角 30 dfs(dep-1,x,y+z*2); //右上角 31 dfs(dep-1,x+z,y+z); //中间 32 // dfs(dep-1,x+z*2,y); //左下角 33 dfs(dep-1,x+z*2,y+z*2); //右下角 34 dfs(dep-1,x+z*2,y); //左下角 35 } 36 int main() 37 { 38 int n; 39 while(~scanf("%d",&n)&&n!=-1) 40 { 41 memset(a,0,sizeof(a)); 42 int len=Increase(n-1);//总的行数 43 rep(i,0,len-1){ 44 rep(j,0,len-1){ 45 a[i][j]=' '; 46 } 47 a[i][len]='\0'; 48 } 49 dfs(n,0,0); 50 rep(i,0,len-1) printf("%s\n",a[i]); 51 puts("-"); 52 } 53 return 0; 54 }
永远年轻 永远热泪盈眶!