牛客小白月赛75 方豆子(递归模拟)

阿宁最近对吃豆子感兴趣,阿宁想要用程序输出一下,但是图形化对于阿宁来说太难。因此他决定用字符,并且是方形的模样。
 

给一个正整数nnn,输出nnn级好豆子。

一级好豆子:
******
******
******
***...
***...
***...

一级坏豆子:
......
......
......
...***
...***
...***

二级好豆子:
一级坏豆子 一级坏豆子
一级坏豆子 一级好豆子

二级坏豆子:
一级好豆子 一级好豆子
一级好豆子 一级坏豆子

...

x级好豆子:
x-1级坏豆子 x-1级坏豆子
x-1级坏豆子 x-1级好豆子


x级坏豆子:
x-1级好豆子 x-1级好豆子
x-1级好豆子 x-1级坏豆子

...


 

输入描述:

输入一个整数n。
1≤n≤10

输出描述:

输出3×2n行,每行长度为3×2n的字符串。

示例1

输入

1

输出

******
******
******
***...
***...
***...

示例2

输入

2

输出

............
............
............
...***...***
...***...***
...***...***
......******
......******
......******
...******...
...******...
...******...

感觉是一个很好的递归模拟

#include
using namespace std;
int n;
char mp[4000][4000];
void dfs(int r1,int c1,int r2,int c2,int good)
{
	if(r1==r2){
		for(int i=1;i<=6;i++){
			for(int j=1;j<=6;j++){
				if(i>3&&j>3)
				mp[(r1-1)*6+i][(c1-1)*6+j]=(good==1?'.':'*');
				else
				mp[(r1-1)*6+i][(c1-1)*6+j]=(good==1?'*':'.');
			}
		}
		return;
	}
	int rm=(r1+r2)/2,cm=(c1+c2)/2;
	dfs(r1,c1,rm,cm,-good);
	dfs(r1,cm+1,rm,c2,-good);
	dfs(rm+1,c1,r2,cm,-good);
	dfs(rm+1,cm+1,r2,c2,good);
}
int main()
{
	cin>>n;
	dfs(1,1,1<<(n-1),1<<(n-1),1);
	for(int i=1;i<=3*(1<

你可能感兴趣的:(算法,c++)