AcWing 118 分形

题目描述:

分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。现在,定义“盒子分形”如下:

一级盒子分形:

   X

二级盒子分形:

   X X
    X
   X X

如果用B(n - 1)代表第n-1级盒子分形,那么第n级盒子分形即为:

  B(n - 1)        B(n - 1)

          B(n - 1)

  B(n - 1)        B(n - 1)

你的任务是绘制一个n级的盒子分形。

输入格式

输入包含几个测试用例。

输入的每一行包含一个不大于7的正整数n,代表要输出的盒子分形的等级。

输入的最后一行为-1,代表输入结束。

输出格式

对于每个测试用例,使用“X”符号输出对应等级的盒子分形。

请注意’X’是一个大写字母。

每个测试用例后输出一个独立一行的短划线。

输入样例:

1
2
3
4
-1

输出样例

X
-
X X
 X
X X
-
X X   X X
 X     X
X X   X X
   X X
    X
   X X
X X   X X
 X     X
X X   X X
-
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
   X X               X X
    X                 X
   X X               X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
         X X   X X
          X     X
         X X   X X
            X X
             X
            X X
         X X   X X
          X     X
         X X   X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
   X X               X X
    X                 X
   X X               X X
X X   X X         X X   X X
 X     X           X     X
X X   X X         X X   X X
-

分析:

本题是简单的模拟题,只要每次将上一级盒子复制四份即可。分别是c[i][j+2*len],c[i+len][j+len],c[i+2*len][j],c[i+2*len][j+2*len]。本来可以一次性过的,但是提交一直WA,对比答案,发现换行的间距比答案大,于是一直纠结于明明换了一次行为啥产生了换行两次的效果。最后,找到原因,一次输出结束输出的是"-"而不是"_",超级坑。

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
char c[1000][1000];
int main(){
    int n;
    memset(c,0,sizeof(c));
    c[0][0] = 'X';
    for(int len = 1;len <= pow(3,5);len *= 3){
        for(int i = 0;i < len;i++){
            for(int j = 0;j < len;j++){
                c[i+2*len][j]=c[i+2*len][j+2*len]=c[i+len][j+len]=c[i][j+2*len]=c[i][j];
            }
        }
    }
    while(cin>>n,n != -1){
        int len = pow(3,n - 1);
        for(int i = 0;i < len;i++){
            for(int j = 0;j < len;j++){
                if(c[i][j] == 'X')  cout<<c[i][j];
                else    cout<<" ";
            }
            cout<<endl;
        }
        cout<<"-"<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_30277239/article/details/89048813
118