**题意:在给定的n * m个格子种填入白色或者黑色,使得白色的个数等于黑色的个数加1(当黑色与白色相邻的时候才算数,若黑色附近全是黑色,则不算数)
思路:黑白黑白交叉,如下图,当n * m为奇数时,B显然会比W多一个 ,满足条件,因此我们只需要考虑,n * m为偶数时,由下图可知,可以直接将最后一个元素改成B(如2,3若本来是B也不影响),当然如果n,m都是偶数的时候,需要把第n行第m-1个元素改成B
下面展示代码:
#include <iostream>
using namespace std;
int main()
{
int T;
char c[1000][1000];
scanf("%d", &T);
while(T--){
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if((i+j) % 2== 1)
c[i][j] = 'W';
else
c[i][j] = 'B';
}
}
c[n][m] = 'B';
if(n % 2 == 0 && m % 2 == 0)
c[n][m-1] = 'B';
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++)
printf("%c", c[i][j]);
printf("\n");
}
}
return 0;
}