乐逍遥xwl

导航

分形算法 (dfs)


圆圈

题目描述

    圈圈圆圆圈圈,lulu小朋友最近看喜羊羊看多了,老是受刺激就画圆圈,听到小于8的数字时,还会画出十分有规律的圆圈,现在你需要根据样例观察出规律,编写程序,根据输入的数字n(n<8),输出对应的圆圈。

输入描述:

第一行是样例数T(T<9)
第2到2+T-1行每行有一个整数n(n<8),代表lulu听到的数字

输出描述:

听到对应数字时,输出对应样子的圆圈。
示例1

输入

4
0
1
2
3

输出

O
 O
O O
 O
    O
   O O
    O
 O     O
O O   O O
 O     O
    O
   O O
    O
             O
            O O
             O
          O     O
         O O   O O
          O     O
             O
            O O
             O
    O                 O
   O O               O O
    O                 O
 O     O           O     O
O O   O O         O O   O O
 O     O           O     O
    O                 O
   O O               O O
    O                 O
             O
            O O
             O
          O     O
         O O   O O
          O     O
             O
            O O
             O

说明

当n=0时输出
O
当n=1时输出
*O
O*O
*O
当n=2时输出
****O
***O*O
****O
*O*****O
O*O***O*O
*O*****O
****O
***O*O
****O
上面的'O'是大写英文字母O,'*'代表空格,每一行最后一个O后面不带空格。

备注:

对于100%的数据,
0<T<9;
0<=n<8;



 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<map>
 7 #include<set>
 8 #include<vector>
 9 #include<stack>
10 #include<queue> 
11 using namespace std;
12 #define ll long long
13 const int inf=99999999;
14 const int mod=1e9+7;
15 const int maxn=2500;
16 char e[maxn][maxn];
17 int len;
18 void dfs(int n,int x,int y)
19 {
20     if(n==1)
21         e[x][y]='O';
22     else
23     {
24         int d=pow(3,n-2); 
25         dfs(n-1,x+d,y);
26           //左方的分形
27         dfs(n-1,x,y+d);
28           //上方的分形
29         dfs(n-1,x+d,y+2*d);
30            //右方的分形
31         dfs(n-1,x+2*d,y+d);
32           //下方的分形
33     }
34 }
35 int main()
36 {
37     int T;
38     cin>>T;
39     int n;
40     while(T--)
41     {
42         cin>>n;
43         len=pow(3,n);//图的大小 
44         for(int i=0;i<len;i++)//初始化 
45             for(int j=0;j<len;j++)
46                 e[i][j]=' ';
47         dfs(n+1,0,0);//搜索 
48         for(int i=0;i<len;i++)//打印图形 
49         {
50             for(int j=0;j<len;j++)
51                 cout<<e[i][j];
52             cout<<endl;
53            }
54        }
55     return 0;
56 }



posted on 2019-05-19 17:13  乐逍遥xwl  阅读(589)  评论(0编辑  收藏  举报