POJ 2083 Fractal

本文介绍了一个使用递归算法绘制分形盒子的C++程序。分形盒子是一种展示自相似性的几何图形,在不同尺度上重复相同的结构类型。文章通过具体实例解释了如何定义和绘制不同级别的分形盒子,并提供了一段C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Fractal
Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 18196 Accepted: 7509
Description

A fractal is an object or quantity that displays self-similarity, in a somewhat technical sense, on all scales. The object need not exhibit exactly the same structure at all scales, but the same “type” of structures must appear on all scales.
A box fractal is defined as below :
A box fractal of degree 1 is simply
X
A box fractal of degree 2 is
X X
X
X X
If using B(n - 1) to represent the box fractal of degree n - 1, then a box fractal of degree n is defined recursively as following
B(n - 1) B(n - 1)

    B(n - 1)

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

Your task is to draw a box fractal of degree n.
Input

The input consists of several test cases. Each line of the input contains a positive integer n which is no greater than 7. The last line of input is a negative integer −1 indicating the end of input.
Output

For each test case, output the box fractal using the ‘X’ notation. Please notice that ‘X’ is an uppercase letter. Print a line with only a single dash after each test case.
Sample Input

1
2
3
4
-1
Sample Output

X

X X
X
X X

X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X

X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X

Source

Shanghai 2004 Preliminary

还是讲课 递归的例题,,,,分治可能更合适
写代码的时候想直接输出 但是发现多行的空格并不好输出,所以还是二位数组标记,然后输出数组就好了

//POJ 2083 ZOJ 2423
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
// 这个题我觉得更可能是分治    当初分治就没咋学  现在补吧
using namespace std;
char map[1021][1201];
void print(int n,int x,int y) {
    if(n == 1) { map[x][y] = 'X'; return ; }
    int m = pow(3.0,n - 2);
    print(n - 1,x,y);// 左上角
    print(n - 1,x,y + 2 * m);// 右上角
    print(n - 1,x + m, y + m);// 中间
    print(n - 1,x + 2 * m,y);// 左下角
    print(n - 1,x + 2 * m,y + 2 * m);// 右下角
}

int main(int argc,char* argv[]) {
    int n;
    while(scanf("%d",&n) == 1) {
        if(n == -1) break;
        memset(map,' ',sizeof(map));
        print(n,1,1);
        int m = pow(3.0,n - 1);
        for(int i=1; i<=m; i++){
            for(int j=1; j<=m; j++)
                printf("%c",map[i][j]);
            printf("\n");
        }
        printf("-\n");
    }
    return 0;
}

刚开始交的时候 CE了,本地并没有问题哪位大佬指点迷津,CE信息如下

Main.cpp
F:\temp\21815787.242778\Main.cpp(1) : error C2143: syntax error : missing ';' before '+'
F:\temp\21815787.242778\Main.cpp(1) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七情六欲·

学生党不容易~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值