比赛 随便比赛 评测结果 A
题目名称 分形 最终得分 100
用户昵称 wdsjl 运行时间 0.374 s
代码语言 C++ 内存使用 3.61 MiB
提交时间 2024-08-27 20:41:29
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

int n;

void kong(int n){
	for(int i=1;i<=n;i++)cout<<" ";
}

void s(int n,int l,int f){
	if(n==1){
		cout<<"X";
	}else{
		if(l<=pow(3,n-1)/3){
			if(f){
				s(n-1,l,f);
			}else{
				s(n-1,l,!f);
			}
			kong(pow(3,n-2));
			s(n-1,l,f);
		}else if(l<=2*pow(3,n-1)/3){
			kong(pow(3,n-2));
			s(n-1,l%(int)(pow(3,n-1)/3),f);
			if(f)kong(pow(3,n-2));
		}else{
			if(f)s(n-1,l%(int)(pow(3,n-1)/3),f);
			else s(n-1,l%(int)(pow(3,n-1)/3),!f);
			kong(pow(3,n-2));
			s(n-1,l%(int)(pow(3,n-1)/3),f);
		}
	}
}

void d(int n){
	if(n==1){
		cout<<"X";
		return ;
	}
	for(int i=1;i<=pow(3,n-1)/3;i++){
		s(n-1,i,1);
		kong(pow(3,n-2));
		s(n-1,i,0);
		cout<<endl;
	}
	for(int i=1;i<=pow(3,n-1)/3;i++){
		kong(pow(3,n-2));
		s(n-1,i,0);
		cout<<endl;
	}
	for(int i=1;i<=pow(3,n-1)/3;i++){
		s(n-1,i,1);
		kong(pow(3,n-2));
		s(n-1,i,0);
		cout<<endl;
	}
}

int main(){
	freopen("fractal.in","r",stdin);
	freopen("fractal.out","w",stdout);
	while(cin>>n){
		if(n==-1){
			return 0;
		}else if(n==1){
			cout<<"X"<<endl;
		}else d(n); 
		cout<<"-"<<endl;
	}
	return 0;
}