分形
题目ID:20635必做题100分
最新提交:
Runtime Error
30 分
历史最高:
Runtime Error
30 分时间限制: 1000ms
空间限制: 65536kB题目描述
分形,具有以非整数维形式充填空间的形态特征。
通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。
现在,定义“盒子分形”如下:
一级盒子分形:
X
二级盒子分形:
X X
X
X X
如果用B(n−1)B(n−1)代表第n−1n−1级盒子分形,那么第nn级盒子分形即为:
B(n - 1) B(n - 1)
B(n - 1)
B(n - 1) B(n - 1)
你的任务是绘制一个nn级的盒子分形。
输入格式输入包含几个测试用例。
输入的每一行包含一个不大于77的正整数nn,代表要输出的盒子分形的等级。
输入的最后一行为nn,代表输入结束。
输出格式对于每个测试用例,使用 X 符号输出对应等级的盒子分形。
请注意 X 是一个大写字母。
每个测试用例后输出一个独立一行的短划线。
样例
Input 11
2
3
4
-1Output 1
X
X X
X
X XX X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X XX X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X
X
X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
X X X X
X X
X X X X
X X X X X X X X
X X X X
X X X X X X X X
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
char a[1005][1005];
void f(int x,int y,int nn){
if(nn==0){
a[x][y]='X';
return;
}
else{
int k=pow(3,nn-1);
f(x+2*k,y,nn-1);
f(x,y+2*k,nn-1);
f(x+k,y+k,nn-1);
f(x,y,nn-1);
f(x+2*k,y+2*k,nn-1);
}
}
int main(){
while(1){
scanf("%d",&n);
if(n==-1){
return 0;
}
int n_3=pow(3,n-1);
for(int i=0;i<=n_3;i++){
for(int j=0;j<=n_3;j++){
a[i][j]=' ';
}
}
f(1,1,n);
for(int i=1;i<=n_3;i++){
for(int j=1;j<=n_3;j++){
cout<<a[i][j];
}
cout<<endl;
}
cout<<"-"<<endl;
}
return 0;
}
/*
2 2 1
2 1 1
4 4 3
4 3 3
*/
由于某种原因,这道题没有解决方案