Demo entry 6763001

easy

   

Submitted by 反对法 on Oct 18, 2018 at 11:05
Language: C++. Code size: 890 Bytes.

/*
*** #19 画个圈圈诅咒你
*** 递归
*/
#include <bits/stdc++.h>
#define llt long long 
using namespace std;

int pow_3[10];
const int N = 7000;
vector<int>Vector[N];//Vector[i] 记录第i行的所有圈圈出现的位置

void dfs(int rt,int x,int y){//到达第rt级咒语,坐标向右平移x格,向下平移y格
	if(rt==0){
		Vector[y+1].push_back(x+1);
		return;
	}

	dfs(rt-1,x+pow_3[rt-1],y);// 上:第rt-1级咒语
	dfs(rt-1,x+pow_3[rt-1],y+2*pow_3[rt-1]); // 下:第rt-1级咒语
	dfs(rt-1,x,y+pow_3[rt-1]);//左:第rt-1级咒语
	dfs(rt-1,x+2*pow_3[rt-1],y+pow_3[rt-1]);////右:第rt-1级咒语
}
int main(){
	/*预处理得到3的次幂*/
	pow_3[0]=1;
	for(int i=1;i<=8;++i)
		pow_3[i]=pow_3[i-1]*3;
	
	int n;
	cin>>n;
	dfs(n,0,0);
	for(int i=1;i<=pow_3[n];++i){
		int size=Vector[i].size();
		int pre=0;
		for(int j=0;j<size;++j){
			for(int k=pre+1;k<Vector[i][j];++k)
				printf(" ");
		    printf("O");
		    pre=Vector[i][j];
		}
		printf("\n");
	}
	return 0;

This snippet took 0.00 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).