p/n棋盘问题

输出字符’p’和’n’的棋盘。

输入格式:
一个数n(表示棋盘大小,即为2​n​​ ∗2​n​​(次方) 的字符棋盘,其中n<10)。

输出格式:
输出一个2​n​​ ∗2​n​​ (次方)的字符棋盘(‘字符由‘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";
	}
}

上一篇:RecycleView遇到数据无法刷新问题


下一篇:ES6中的Set和Map对象数据结构