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
问题链接: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打印图案的主要内容,如果未能解决你的问题,请参考以下文章