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 }

 

posted @ 2020-02-19 08:54  留幸愉  阅读(247)  评论(0编辑  收藏  举报