码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 2083 Fractal

时间:2015-11-20 23:04:17      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

问题描述


度为 1 的箱子分形是简单的:

X

度为 2 的箱子分形是这样的:

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 是一个大写字母。在每组数据输出之后输出一个占一行的连字号。

 

思路


递归处理一下。要注意的是,图形末尾不要输出多于的空格,为此在 fillchar 里面填空格只要填一部分。

 

代码


#include <stdio.h>
#include <string.h>

const int MAXN = 1024;
char result[MAXN][MAXN];
int pow3[MAXN];

void fillchar(int n, int x, int y)
{
  if (n == 1) {
    result[x][y] = ‘X‘;
    return ;
  }
  int k = pow3[n - 2];
  int kk = k + k;
  for (int i = 0; i < k; i++)
    for (int j = 0; j < kk; j++)
      result[x + i][y + j] = ‘ ‘;
  for (int i = k; i < kk; i++)
    for (int j = 0; j < k; j++)
      result[x + i][y + j] = ‘ ‘;
  for (int i = kk;  i < pow3[n - 1]; i++)
    for (int j = 0; j < kk; j++)
      result[x + i][y + j] = ‘ ‘;
  fillchar(n - 1, x, y);
  fillchar(n - 1, x, y + kk);
  fillchar(n - 1, x + k, y + k);
  fillchar(n - 1, x + kk, y);
  fillchar(n - 1, x + kk, y + kk);
}

int main()
{
  pow3[0] = 1;
  for (int i = 1; i < MAXN; i++)
    pow3[i] = pow3[i - 1] * 3;
  int n;
  for (; scanf("%d", &n), n != -1; ) {
    memset(result, 0, sizeof(result));
    fillchar(n, 0, 0);
    for (int i = 0; i < pow3[n - 1]; i++)
      printf("%s\n", result[i]);
    printf("-\n");
  }
  return 0;
}

  

POJ 2083 Fractal

标签:

原文地址:http://www.cnblogs.com/gu-castle/p/4982522.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!