POJ2083 Fractal打印图案

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ2083 Fractal打印图案相关的知识,希望对你有一定的参考价值。

Fractal
Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 21167 Accepted: 8462

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

问题链接POJ2083 Fractal
问题简述:(略)
问题分析:递归打印图案问题,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* POJ2083 Fractal */

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int qpow(int n, int k)
{
    if (k < 0) return 0;
    int ret = 1;
    while (k)
        if (k & 1) ret *= n, k--;
        else n *= n, k /= 2;
    return ret;
}

char map[1000][1000];

void display(int n, int x, int y)
{
    int size = qpow(3, n - 2);
    if (n == 1) map[x][y] = 'X';
    else {
        display(n - 1, x, y); //左上
        display(n - 1, x, y + 2 * size);//右上
        display(n - 1, x + size, y + size);//中间
        display(n - 1, x + 2 * size, y);//左下
        display(n - 1, x + 2 * size, y + 2 * size);//右下
    }
}

int main()
{
    int n;
    while (~scanf("%d", &n) && n != -1) {
        memset(map, 0, sizeof map);

        int size = qpow(3, n - 1);
        for (int i = 0, j; i < size; i++) {
            for (j = 0; j < size; j++)
                map[i][j] = ' ';
            map[i][j] = '\\0';
        }

        display(n, 0, 0);

        for (int i = 0; i < size; i++)
            puts(map[i]);
        puts("-");
    }

    return 0;
}

以上是关于POJ2083 Fractal打印图案的主要内容,如果未能解决你的问题,请参考以下文章

$Poj2083/AcWing118 Fractal$ 模拟

POJ3889 Fractal Streets

[POJ3889]Fractal Streets

poj3889 Fractal Streets 题解报告

POJ3889 Fractal Streets

POJ3889Fractal Streets