当前位置: 首页 > news >正文

算法进阶指南 分形

问题描述

分形,具有以非整数维形式充填空间的形态特征。通常被定义为:

“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。

现在,定义“盒子分形”如下:

一级盒子分形:

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)

即在一个大的框架中由 5 个 B(n - 1) 的图块构成——上下左右 4 个角以及中间部分。


输入格式

  • 输入包含多个测试用例。
  • 每个测试用例为一行,包含一个不大于 7 的正整数 n,表示输出第 n 级的盒子分形。
  • 输入的最后一行为 -1,表示输入结束。

输出格式

  • 对于每个测试用例,输出由字符 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++代码

#include<bits/stdc++.h>

using namespace std;

vector<vector<string>> result(8);

vector<string> op(int x) {
    if (result[x].size() > 0) return result[x];
    vector<string> ans((int)(pow(3, x - 1)));
    if (x == 1) {
        ans[0] = "X";
        return ans;
    }
    vector<string> last = op(x - 1);
    int k = (int)pow(3, x - 2), w = 0;
    for (int i = 0; i < last.size(); i++, w++) {
        for (int j = 0; j < last[i].size(); j++) ans[w] += last[i][j];
        for (int j = 0; j < k; j++) ans[w] += " ";
        for (int j = 0; j < last[i].size(); j++) ans[w] += last[i][j];
    }
    for (int i = 0; i < last.size(); i++, w++) {
        for (int j = 0; j < k; j++) ans[w] += " ";
        for (int j = 0; j < last[i].size(); j++) ans[w] += last[i][j];
        for (int j = 0; j < k; j++) ans[w] += " ";
    }
    for (int i = 0; i < last.size(); i++, w++) {
        for (int j = 0; j < last[i].size(); j++) ans[w] += last[i][j];
        for (int j = 0; j < k; j++) ans[w] += " ";
        for (int j = 0; j < last[i].size(); j++) ans[w] += last[i][j];
    }
    return ans;
}

int main() {
    int n;
    for (int i = 1; i <= 7; i++) {
        result[i] = op(i);
    }
    while(cin >> n) {
        if (n == -1) break;
        vector<string> strs = result[n];
        for (string s : strs) {
            for (char a : s) {
                cout << a;
            }
            cout << endl;
        }
        cout << "-" << endl;
    }
    return 0;
}//by wqs

找规律的题目

相关文章:

  • Java垃圾回收的隐性杀手:过早晋升的识别与优化实战
  • 「合诚」携手企企通共建新材料和健康产业采购数智化新生态
  • rqlite:一个基于SQLite构建的分布式数据库
  • MySQL数据库应用技术试卷
  • main函数参数
  • PyTorch 深度学习 || 6. Transformer | Ch6.2 注意力机制
  • 使用PX4,gazebo,mavros为旋翼添加下视的相机(仿真采集openrealm数据集-第一步)
  • Java 通过 JNI 调用 C++ 动态库的完整流程
  • 获客系统 V2
  • AI一周事件(2025年3月31日至4月7日)
  • 汇丰eee2
  • LDAP高效数据同步:Syncrepl复制模式实战指南
  • 【AI】Ragflow构建本地知识库
  • 数据结构与算法-数学-容斥原理,高斯消元解线性方程组
  • (C语言)双向链表(教程)(指针)(数据结构)
  • 从表格到序列:Swift 如何优雅地解 LeetCode 251 展开二维向量
  • 【JAVA】十、基础知识“类和对象”干货分享~(三)
  • HYCX笔试
  • GNSS有源天线和无源天线
  • 【每日一个知识点】多项式回归(Polynomial Regression)
  • 巴基斯坦称未违反停火协议
  • 竞彩湃|德甲欧冠资格竞争白热化,伯恩茅斯主场迎恶战
  • 上财发布“AI+课程体系”,人工智能如何赋能财经教育?
  • 上海国际电影节推出三大官方推荐单元,精选十部优秀影片
  • 全国人大常委会启动食品安全法执法检查
  • 印度外交秘书:“朱砂行动”不针对军事设施,无意升级事态