zoukankan      html  css  js  c++  java
  • poj1941(递归)

    The Sierpinski Fractal
    Time Limit: 1000MS   Memory Limit: 30000K
    Total Submissions: 4773   Accepted: 1979

    Description

    Consider a regular triangular area, divide it into four equal triangles of half height and remove the one in the middle. Apply the same operation recursively to each of the three remaining triangles. If we repeated this procedure infinite times, we'd obtain something with an area of zero. The fractal that evolves this way is called the Sierpinski Triangle. Although its topological dimension is 2, its Hausdorff-Besicovitch dimension is log(3)/log(2)~1.58, a fractional value (that's why it is called a fractal). By the way, the Hausdorff-Besicovitch dimension of the Norwegian coast is approximately 1.52, its topological dimension being 1.

    For this problem, you are to outline the Sierpinski Triangle up to a certain recursion depth, using just ASCII characters. Since the drawing resolution is thus fixed, you'll need to grow the picture appropriately. Draw the smallest triangle (that is not divided any further) with two slashes, to backslashes and two underscores like this:
     /
    
    /__

    To see how to draw larger triangles, take a look at the sample output.

    Input

    The input contains several testcases. Each is specified by an integer n. Input is terminated by n=0. Otherwise 1<=n<=10 indicates the recursion depth.

    Output

    For each test case draw an outline of the Sierpinski Triangle with a side's total length of 2n characters. Align your output to the left, that is, print the bottom leftmost slash into the first column. The output must not contain any trailing blanks. Print an empty line after each test case.

    Sample Input

    3
    2
    1
    0
    

    Sample Output

           /
          /__
         /  /
        /__/__
       /      /
      /__    /__
     /  /  /  /
    /__/__/__/__
    
       /
      /__
     /  /
    /__/__
    
     /
    /__
    

    分析:递归。开个二维数组,draw(i,j,N)表示在坐标(i,j)开始画三角形(边长2N),
    每次把大三角形分为三个小三角形,直到N==1的时候开始画。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    char s[2050][2050];
    
    void draw(int i,int j,int n)
    {
        if(n==1)
        {
            s[i][j]='/';
            s[i][j+1]='\';
            s[i+1][j-1]='/';
            s[i+1][j]='_';
            s[i+1][j+1]='_';
            s[i+1][j+2]='\';
        }
        else
        {
            int dis=(int)pow(2.0,n-1);
            draw(i,j,n-1);//大三角形分为三个小三角形 
            draw(i+dis,j-dis,n-1);
            draw(i+dis,j+dis,n-1);
        }
    }
    
    int main()
    {
        int N;
        while(scanf("%d",&N)&&N)
        {
            for(int i=0;i<2050;i++)
            memset(s[i],' ',sizeof(s[i]));
            int dis=(int)pow(2.0,N);
            draw(0,dis-1,N);
            for(int i=0;i<dis;i++)
            {
                int j=dis*2;
                while(j>=0)
                {
                    if(s[i][j]!=' ') break;
                    j--;
                }
                s[i][j+1]='';
                puts(s[i]);
            }
            printf("
    ");
        }
        return 0;
    }
    View Code



  • 相关阅读:
    IOS提交审核 错误Missing Push Notification Entitlement
    IOS提交审核 Missing Info.plist key问题
    【转载】cocos2dx 3.x 声音播放、音量调节
    【乐畅】工作积累 ---- 后台倒计时 ( 体力恢复功能 )
    【乐畅】工作积累 ---- 时间获取各个方法
    【乐畅】工作积累 ---- 设置一个弹窗的层
    【转载】【cocos2dx】特效收集
    【转载】cocos2dx 3.1获取系统当前时间
    【转载】cocos2d-x类型转换(CCstring int string char UTF-8互转)以及字符串详解
    【转载】Cocos2dx 小技巧(十四)ScrollView实现缩放效果
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8325571.html
Copyright © 2011-2022 走看看