题意
一个 $r \times c$ 格的棋盘,每格由 $a \times b$ 个字符组成,已知第一个格子是$\texttt{ 'X' }$,第二个格子是$\texttt{ '.' }$,以此类推,其余的格子在棋盘中交替显示$\texttt{ 'X' }$和$\texttt{ '.' }$,现在给出 $r,c,a,b$ 请你打印这个棋盘。
思路
我们可以先判断每个格子该输什么,可以用一个变量来记上一个的状态,但如果 $c$ 是双数,我们要改变一下(改变第一列),然后后期再按它的要求放大。
代码
#include<bits/stdc++.h>
using namespace std;
int r,a,c,b;
bool f[20][20],lf=1;// f 数组代表每一个格子的内容,lf 是上一个格子的内容。
int main(){
cin>>r>>c>>a>>b;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
if(c%2==0 && j==1 && i!=1) lf=1-lf;//因为要交替显示,然而,如果 c 是双数时就不对了,所以我们要更改它。
f[i][j]=1-lf;//将本格的内容设为上一格的相反值。
lf=f[i][j];//更新
}
}
for(int i=1;i<=r;i++){
for(int ii=1;ii<=a;ii++){//放大a倍
for(int j=1;j<=c;j++){
for(int jj=1;jj<=b;jj++){//放大b倍
if(f[i][j]) cout<<'.';
else cout<<'X';
}
}
cout<<endl;
}
}
return 0;
}