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";
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值