【分形】【洛谷P1498】

https://www.luogu.org/problemnew/show/P1498

题目描述

自从到了南蛮之地,孔明不仅把孟获收拾的服服帖帖,而且还发现了不少少数民族的智慧,他发现少数民族的图腾往往有着一种分形的效果,在得到了酋长的传授后,孔明掌握了不少绘图技术,但唯独不会画他们的图腾,于是他找上了你的爷爷的爷爷的爷爷的爷爷……帮忙,作为一个好孙子的孙子的孙子的孙子……你能做到吗?

输入输出格式

输入格式:

每个数据一个数字,表示图腾的大小(此大小非彼大小) n<=10

输出格式:

这个大小的图腾

输入输出样例

输入样例#1:
2
输出样例#1: 
   /\
  /__\
 /\  /\
/__\/__\
输入样例#2: 
3
输出样例#2: 
       /\
      /__\
     /\  /\
    /__\/__\
   /\      /\
  /__\    /__\
 /\  /\  /\  /\
/__\/__\/__\/__\
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 /*
 7    /\
 8   /__\
 9  /\  /\
10 /__\/__\
11 */
12 int n;
13 char ch[2501][2501];
14 int mypow(int x,int y)
15 {
16     int ans=1;
17     while(y)
18     {
19         if(y&1)ans*=x;
20         x*=x;
21         y/=2;
22     }
23     return ans;
24 }
25 void dfs(int q,int w,int e,int t)//q控制图形递归的边界 w e 控制横纵坐标 t控制深度【用于控制w e的大小,递归分形的精髓,一定要由n分解成n-1,然后观察w e的大小变化】
26 {
27 //    cout << w << "    "<<e << endl;
28     if(q==1)
29     {
30         ch[w][e]='/';
31         ch[w][e+1]='\\';
32         ch[w+1][e-1]='/';
33         ch[w+1][e+2]='\\';
34         ch[w+1][e]='_';
35         ch[w+1][e+1]='_';
36         return;
37     }
38     dfs(q/2,w,e,t*2);
39     dfs(q/2,w+t,e-t,t*2);
40     dfs(q/2,w+t,e+t,t*2);    
41 }
42 int main()
43 {
44     scanf("%d",&n);
45     for(int i = 0 ; i < 2501 ; i++)
46     {
47         int j;
48         for( j = 0 ; j < 2501 ; j++)
49         {
50             ch[i][j]=' ';
51         }
52     }
53     dfs(mypow(2,n-1),0,mypow(2,n)-1,2);
54     for(int i = 0 ; i < mypow(2,n) ; i++)
55     {
56         for(int j = 2500 ; j >= 0 ; j--)
57         {
58             if(ch[i][j]=='\\')
59             {
60                 ch[i][j+1]='\0';
61                 break;
62             }
63         }
64     }
65     for(int i = 0 ; i < mypow(2,n) ; i++)
66     {
67         printf("%s\n",ch[i]);
68     }
69     return 0;
70 }

 

 

转载于:https://www.cnblogs.com/MekakuCityActor/p/8989025.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值