zoukankan      html  css  js  c++  java
  • [ An Ac a Day ^_^ ] hrbust 2291 Help C5 分形

    开博客这么久从来没写过自己学校oj的题解 今天写一篇吧 嘿嘿

    原题链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2291

    这是我大一的第一次校赛的题目 接触的第一道分形题 当时还想傻傻的printf……

    这道题oj上开2200*2200就可以了 实际上是6500*6500的样子……

    分形重要的是找到递归的基础点 然后根据基础点去描述图形 然后完成打印

    比如这道题的图案

     CC

    C

     CC

    我选的是第二行唯一一个C作为基础点

    设_deep为下一层图案的大小

    那么五个递归点就可以分别描述为(竖着的是x轴 横着的是y轴 这就是个二维数组嘛)

      (x-deep,y+deep)  (x-deep,y+2*deep)

    (x,y)

      (x+deep,y+deep)  (x-deep,y+2*deep)

    然后递归打印就可以了^_^~

    可以当deep=0时输出 也可以deep=1时输出

    为了区别一下我是自己写的 我就deep=1了 2333~

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<cstring>
     6 #include<string>
     7 #include<bitset>
     8 #include<map>
     9 #include<set>
    10 #include<stack>
    11 #include<vector>
    12 #include<queue>
    13 #include<list>
    14 #define M(a,b) memset(a,b,sizeof(a))
    15 using namespace std;
    16 typedef long long ll;
    17 const int inf=0x3f3f3f3f;
    18 const int maxn=2e3+200;
    19 const int mod=1e7+7;
    20 int dx[8]= {0,0,1,-1,1,-1,1,-1};
    21 int dy[8]= {1,-1,0,0,-1,1,1,-1};
    22 //---------------------------------------ヽ(^。^)丿
    23 char a[maxn][maxn];
    24 
    25 void make(int x,int y,int deep){
    26     if(deep==1){
    27         a[x-1][y]=' ',a[x-1][y+1]='C',a[x-1][y+2]='C';
    28         a[x][y]='C';
    29         a[x+1][y]=' ',a[x+1][y+1]='C',a[x+1][y+2]='C';
    30         return ;
    31     }
    32     int _deep=(int)(pow(3,deep-1)+0.5);
    33     make(x-_deep,y+_deep,deep-1);
    34     make(x-_deep,y+_deep+_deep,deep-1);
    35     make(x,y,deep-1);
    36     make(x+_deep,y+_deep,deep-1);
    37     make(x+_deep,y+_deep+_deep,deep-1);
    38 }
    39 
    40 int main(){
    41     int T;
    42     scanf("%d",&T);
    43     while(T--){
    44         int n;
    45         scanf("%d",&n);
    46         M(a,' ');
    47         if(n==0){
    48             printf("C
    ");
    49             continue;
    50         }
    51         int deep=(int)(pow(3,n)+0.5);
    52         make(deep/2+1,1,n);
    53         for(int i=1;i<=deep;i++){
    54             for(int j=deep;j>=1;j--){
    55                 if(a[i][j]=='C'){
    56                     a[i][j+1]='';
    57                     break;
    58                 }
    59             }
    60         }
    61         for(int i=1;i<=deep;i++){
    62             int j=1;
    63             while(a[i][j]) printf("%c",a[i][j++]);
    64             printf("
    ");
    65         }
    66     }
    67     return 0;
    68 }
    69 /*
    70 
    71 
    72 
    73 */
  • 相关阅读:
    前端——DOM
    前端——JavaScript
    前端——HTML
    初学Python——协程
    初学Python——进程
    初学Python——线程
    初学Python——Socket网络编程
    初学Python——RabbitMQ的安装
    初学Python——面向对象(二)
    muduo网络库源码学习————线程池实现
  • 原文地址:https://www.cnblogs.com/general10/p/5938817.html
Copyright © 2011-2022 走看看