递归算法——BOX FRACTAL 盒分形(POJ2083)

问题

盒分形定义如下:

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的正整数。输入的最后一行以-1表示输入结束

输出

对于每个测试用例,出书用’X’标记的盒分形。在每个测试用例后输出包含一个短划线“-”的一行。

分析

n度的盒分形的规模为3^(n-1),即n度的盒分形图为一个长宽为3^(n-1)的正方形。

设置递归函数printBox(n,x,y)生成以坐标(x,y)为左上角的n度盒分形。

1)递归边界: 若n=1,则在(x,y)输出‘X’

2)若n>1,则计算n-1度的盒子的规模 m = 3^(n-2),分别在左上方, 右上方,中间,左下方和右下方画出5个n-1度的盒子。

对于左上方的n-1度的盒子,左上角的坐标为(x,y),递归printBox(n-1,x,y)生成;

对于右上方的n-1度的盒子,左上角的坐标为(x+2m,y),递归printBox(n-1,x+2m,y)生成;

对于中间的n-1度的盒子,左上角的坐标为(x+m,y+m),递归printBox(n-1,x+m,y+m)生成;

对于左下方的n-1度的盒子,左上角的坐标为(x,y+2m),递归printBox(n-1,x,y+2m)生成;

对于右上方n-1度的盒子,左上角的坐标为(x+2m,y+2m),递归printBox(n-1,x+2m,y+2m)生成;

编码实现

#include "stdafx.h"
#include <cmath>
#include <iostream>
using namespace std;
//7度盒分形 最大规模n=3^6=729
#define MAX 730

char maps[MAX][MAX];

void printBox(int n, int x, int y)
{
    //递归边界
    if (n == 1){
        maps[x][y] = ‘X‘;
    }
    else{
        //n-1度盒分形的规模m
        int m = pow(3, n - 2);
        //左上方的n-1度盒分形
        printBox(n - 1, x, y);
        //右上方的n-1度盒分形
        printBox(n-1, x+2*m, y);
        //中间的n-1度盒分形
        printBox(n - 1, x , y + 2 * m);
        //左下方的n-1度盒分形
        printBox(n - 1, x + m, y + m);
        //右下方的n-1度盒分形
        printBox(n-1,x+2*m,y+2*m);

    }

}

int _tmain(int argc, _TCHAR* argv[])
{
    int n ;
    cin >> n;
    while (n != -1){
        int size = pow(3, n - 1);
        //初始化
        for (int i = 0; i < size; i++){
            for (int j = 0; j < size; j++){
                maps[i][j] = ‘ ‘;
                maps[i][size] = ‘\0‘;
            }
        }
        printBox(n, 0, 0);
        //输出
        for (int i = 0; i < size; i++)
            printf("%s\n", maps[i]);
        cout << "-"<<endl;
        cin >> n;
    }

    return 0;
}

测试

时间: 2024-08-11 03:35:20

递归算法——BOX FRACTAL 盒分形(POJ2083)的相关文章

zju 1251 Bricks box 砖盒----------hdu 1326

#include <iostream> using namespace std; int main() { int a[51],n,k=1; while(cin>>n,n) { int i,ans=0,s=0; for(i=0;i<n;i++) { cin>>a[i]; s+=a[i]; } s/=n; for(i=0;i<n;i++) if(a[i]>s)ans+=a[i]-s; cout<<"Set #"<&l

被废了的display:box弹性盒模型

这几天在研究弹性布局,看书中写的是display:box,结果在chrome浏览器中是正常的,想着移动端大部分浏览器也是webkit内核的应该也没啥问题,结果确实没问题,但仔细一看,高度呢?好吧,严重的bug,高度不起作用了(特殊情况).再查查资料原来w3c已经废了display:box;换成display:flex了,只好重新学过了,以后还是看这个吧http://www.w3schools.com/国外站请自备神器. UC啥的浏览器用的还是display:box最新的是display:flex

分形树Fractal tree介绍——具体如何结合TokuDB还没有太懂,先记住其和LSM都是一样的适合写密集

在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文章讲的是TokuDB,不是innodb,相比innodb,TokuDB有着自己的特点. 转自:http://www.kryptosx.info/archives/931.html BTree和Fractal tree的比较: 目前无论是SQL Server,还是MySQL的innodb,都是用的B+

Fractal(递归,好题)

Fractal Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 8341   Accepted: 3965 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

03 弹性盒模型

一.Flex布局(新版弹性盒模型) 1.是什么 flexible box 弹性盒模型     注意:设成flex布局之后,子元素的float clear vertical-align 都失效.该元素称为"容器",子元素成为容器成员,称flex项目(简称"项目") 默认类似line-block样式,row nowrap flex-start .box{ display: -webkit-flex; display: flex; /* display: inline-f

FZU--1859&amp;POJ--2083|(分治法)

Fractal Time Limit: 1000MS   Memory Limit: 30000KB   64bit IO Format: %I64d & %I64u Submit Status 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

POJ 题目2083 Fractal(分治)

Fractal Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 7937   Accepted: 3807 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

css盒模型与bfc与布局与垂直水平居中与css设计模式等

一.css盒子与布局相关 盒子内部的布局 盒子之间的布局visual formatting 脱离正常流normal flow的盒子的布局 absolute布局上下文下的布局 float布局上下文下的布局 flow下的盒子的布局 BFC布局上下文下的布局 IFC布局上下文下的布局 FFC布局上下文下的布局 table布局上下文下的布局 css grid布局上下文下的布局 1.css盒模型 页面上显示的每个元素(包括内联元素)都可以看作一个盒子,即盒模型( box model ) 盒模型有4部分组成

碰撞器与触发器[Unity]

请看原帖,移步:Unity3d碰撞检测中碰撞器与触发器的区别 要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过. 物体发生碰撞的必要条件: 两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体. 在unity3d中,能检测碰撞发生的