分型盒 题目ID:9436(没思路)

  1. 分型盒
    题目ID:9436选做题100分
    最新提交:
    0 分
    历史最高:
    0 分
    时间限制: 1000ms
    空间限制: 524288kB
    题目描述
    【题目描述】

分形,通常被定义为一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状,即具有自相似的性质。它跟分数维、自组织、非线性系统和混沌等具有非常重要的联系。

分形盒就是这样一种分形,它的定义如下:
维度是1的分形盒:
x
维度是2的分形盒:
x x
x
x x
如果已知维度是(n-1)的分形盒,那么维度是n的分形盒的递归定义如下所示:
Box(n-1) Box(n-1)
Box(n-1)
Box(n-1) Box(n-1)
你的任务是画一个维度为n的分形盒。

【输入】

输入一行包含一个正整数n表示分形盒的维度,n不大于7。

【输出】

输出要求维度的分形盒,注意x为小写字母。

【样例输入】

3
【样例输出】

x x x x
x x
x x x x
x x
x
x x
x x x x
x x
x x x x

这道题可以将维度是1的分形盒存下来,向右、下、右下三个方向复制。

2 个赞

正解就是递归

2 个赞

这就是递归的核心代码

void dfs(int x,int y,int s)
{
	if(s==1)
	{
		a[x][y]='x';
		return;
	}
	int t=pow(3,s-2);
	dfs(x,y,s-1);
	dfs(x+t,y+t,s-1);
	dfs(x+t+t,y,s-1);
	dfs(x,y+t+t,s-1);
	dfs(x+t+t,y+t+t,s-1);
}
2 个赞

空格怎么办?

memset(a,' ',sizeof a);
2 个赞

主函数加上这句话

2 个赞

@陈娅琦 解决了吗?

3 个赞

是不是最后输出a数组就行了?

是的

2 个赞

@姜一墨
dfs传入的参数是什么?

1,1,n

2 个赞

@姜一墨
原来是1,1,n,我刚才写的是dfs(0,0,n)。

666
现在A了吗

2 个赞
#include<bits/stdc++.h>
using namespace std;
char a[1005][1005];
void dfs(int x,int y,int s){
	if(s==1){
		a[x][y]='x';
		return;
	}
	int t=pow(3,s-2);
	dfs(x,y,s-1);
	dfs(x+t,y+t,s-1);
	dfs(x+t+t,y,s-1);
	dfs(x,y+t+t,s-1);
	dfs(x+t+t,y+t+t,s-1);
}
int main(){
	memset(a,' ',sizeof a);
	int n;
	cin>>n;
	dfs(1,1,n);
	for(int i=1;i<=(n-1)*3;i++){
		for(int j=1;j<=(n-1)*3;j++){
			cout<<a[i][j];
		}
		cout<<endl;
	}
	return 0;
}

好像不大对,能帮我看一下吗?

最后输出的循环i和j都应该是<=pow(3,n-1)
也就是3的n-1次方

1 个赞

@姜一墨
谢谢,已经A了!

给个解决方案

1 个赞

@姜一墨
已经给你了。

看到了

1 个赞