题意

一个 $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;
}
最后修改:2023 年 05 月 19 日
如果觉得我的文章对你有用,请随意赞赏