思路:可以先将n和m分为以下三种情况:
1:m为偶数时
当为偶数列时,不难想到,我们一列B,一列W,此时B=2n,W=2n,想让B=W+1,那么就需要将一个白格涂黑,以此来减少一个黑格,一种想法是涂黑第二列的第一个白格,此时B=2n,W=2n-1
2:n为偶数时:
同第一种情况,只需要将列换成行即可
3:n和m均为奇数
还是同第一种情况,首先向m-1列按第一种情况涂,此时B=2n,W=2n,注意此时n为奇数,那么对于最后一列,不难想到我们需要将(n/2)+1个格子涂黑,再将剩下的格子涂白,此时B=2n+(n/2)+1,W=2n+(n/2),显然满足题目要求
以下是代码实现:
#include<iostream>
using namespace std;
char board[110][110];
void solved()
{
int n,m;
cin>>n>>m;
if(m%2==0)//列为偶数
{
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
{
if(j%2==0) board[i][j]='W';
else board[i][j]='B';
}
}
board[1][2]='B';
}
else if(n%2==0)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(i%2==0) board[i][j]='W';
else board[i][j]='B';
}
}
board[2][1]='B';
}
else //行列全为奇
{
for(int j=1;j<=m;j++)
{
for(int i=1;i<=n;i++)
{
if(j%2==0) board[i][j]='W';
else board[i][j]='B';
}
}
for(int i=1;i<=n;i++)
{
if(i%2==0) board[i][m]='W';
else board[i][m]='B';
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<board[i][j];
}
cout<<endl;
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
solved();
}
return 0;
}