输出字符’p’和’n’的棋盘。
输入格式:
一个数n(表示棋盘大小,即为2n ∗2n(次方) 的字符棋盘,其中n<10)。
输出格式:
输出一个2n ∗2n (次方)的字符棋盘(‘字符由‘p’和‘n’组成,‘p’:为正,‘n’为负的意思),其规则为:规模为n的棋盘的左上角,右上角和右下角为规模为n-1的棋盘,其左下角为左上角的取反(即对应字母为‘p’则变为’n’;字母为‘n’则变为’p’)。
输入样例:
1
2
输出样例:
pp
np
pppp
npnp
nnpp
pnnp
代码
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
char ans[512][512];
void ass(int l1, int l2)
{
/*右上角*/
for(int i=0;i<l1/2;i++)
{
for(int j=l1/2;j<l1;j++)
{
ans[i][j]=ans[i][j-l1/2];
}
}
/*左下角*/
for(int i=l1/2;i<l1;i++)
{
for(int j=0;j<l1/2;j++)
{
if(ans[i-l1/2][j]=='p')
{
ans[i][j] = 'n';
}
else if(ans[i-l1/2][j]=='n')
{
ans[i][j] = 'p';
}
}
}
/*右下角*/
for(int i=l1/2;i<l1;i++)
{
for(int j=l1/2;j<l1;j++)
{
ans[i][j] = ans[i-l1/2][j-l1/2];
}
}
}
void rec(int x)
{
if(x==0)
{
ans[0][0]= 'p';
return;
}
rec(x-1);
ass((int)(pow(2,x)), (int)(pow(2,x-1)));
}
int main()
{
int n;
cin>>n;
int l = (int)(pow(2,n));
rec(n);
for(int i=0;i<l;i++)
{
for(int j=0;j<l;j++)
{
cout<<ans[i][j];
}
cout<<"\n";
}
}