• 【分形】【洛谷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]='';
    61                 break;
    62             }
    63         }
    64     }
    65     for(int i = 0 ; i < mypow(2,n) ; i++)
    66     {
    67         printf("%s
    ",ch[i]);
    68     }
    69     return 0;
    70 }

     

  • 相关阅读:
    try catch in php
    druid德鲁伊数据库密码加密
    mysql 1093
    MySQL Delete语句不能用别名
    SQL筛选两个字段同时满足多个条件的结果
    MySQL 查询有效小数位数大于两位的值
    我们慌慌张张,不过图碎银几两
    查看Linux服务器端口占用情况,网络情况和CPU使用情况
    Gitbash命令行管理项目
    IDEA中Git的用户名修改
  • 原文地址:https://www.cnblogs.com/MekakuCityActor/p/8989025.html
Copyright © 2020-2023  润新知