牛客小白月赛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<bits/stdc++.h>
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<<n);i++){
for(int j=1;j<=3*(1<<n);j++){
cout<<mp[i][j];
}
cout<<endl;
}
return 0;
}