• AOJ 716.谢尔宾斯基三角形


    Time Limit: 3000 ms   Case Time Limit: 3000 ms   Memory Limit: 128 MB
    Total Submission: 116   Submission Accepted: 35
     
    Description
    谢尔宾斯基三角形(Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。下面的图片就是谢尔宾斯基三角形的一个简单例子。

    现在,Roll想在自己的电脑中画出这个图形,他要求不高,只要实现一个控制台版本就好,也不需要行首的空格缩进,下面是一个25行的控制台版本的谢尔宾斯基三角形例子。(具体的字符可以参考样例输出)


    你能帮他实现么
    Input
    包含多组输入,EOF结束,每组输入包含一行,每行有一个数字N,表示要输出的是N行的谢尔宾斯基三角形。
    1 <= N <= 512
    Output
    对于每组输入,输出一个N行的谢尔宾斯基三角形。
    Sample Input
    Original Transformed
    1
    2
    3
    25
    
    Sample Output
    Original Transformed
    *
    *
    **
    *
    **
    * *
    *
    **
    * *
    ****
    *   *
    **  **
    * * * *
    ********
    *       *
    **      **
    * *     * *
    ****    ****
    *   *   *   *
    **  **  **  **
    * * * * * * * *
    ****************
    *               *
    **              **
    * *             * *
    ****            ****
    *   *           *   *
    **  **          **  **
    * * * *         * * * *
    ********        ********
    *       *       *       *
    
    Source
    谢尔宾斯基三角形

    可以找到规律:n~2n-2行的内容是1~n-1行的内容水平放置两份

    递推出关系即可

     1 /*
     2     By:OhYee
     3     Github:OhYee
     4     Email:oyohyee@oyohyee.com
     5     Blog:http://www.cnblogs.com/ohyee/
     6 
     7         かしこいかわいい?
     8         エリーチカ!
     9         要写出来Хорошо的代码哦~
    10 */
    11 #include <cstdio>
    12 #include <algorithm>
    13 #include <cstring>
    14 #include <cmath>
    15 #include <string>
    16 #include <iostream>
    17 #include <vector>
    18 #include <list>
    19 #include <stack>
    20 using namespace std;
    21 
    22 #define REP(n) for(int o=0;o<n;o++)
    23 
    24 const int maxn = 512 + 5;
    25 bool d[maxn][maxn];
    26 
    27 //将1~n-1行的内容拷贝两份在n~2n-2行(超过maxn时返回)
    28 void copy(int n) {
    29     for(int i = 1;i < n;i++) {
    30         if(i + n - 1 < maxn)
    31             for(int j = 1;j <= i;j++)
    32                 d[i + n - 1][j] = d[i + n - 1][j + n - 1] = d[i][j];
    33         else
    34             break;
    35     }
    36 }
    37 
    38 int main() {
    39     memset(d,false,sizeof(d));
    40     d[1][1] = 1;
    41 
    42     for(int i = 2;i < maxn;i = 2 * i - 1)
    43         copy(i);
    44 
    45     int n;
    46     while(scanf("%d",&n) != EOF)
    47         for(int i = 1;i <= n;i++) {
    48             for(int j = 1;j <= i;j++) {
    49                 printf("%c",d[i][j] ? '*' : ' ');
    50             }
    51             printf("
    ");
    52         }
    53     return 0;
    54 }
  • 相关阅读:
    CORS跨域解决方案
    修改数据库排序规则实践总结
    【转】通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
    调用远程数据库的T-SQL和SP(SQLSERVER)
    解决在微信网页中百度地图定位不准确的问题
    VUE小知识点
    实现鼠标移过时,显示图片的功能
    实现导出功能
    两数据库表之间迁移插入数据
    IIS配置FTP
  • 原文地址:https://www.cnblogs.com/ohyee/p/5320081.html
Copyright © 2020-2023  润新知