题意概括
画出
r
×
c
r \times c
r×c 的X
、.
相间的棋盘,棋盘的每个格子由大小为
a
×
b
a \times b
a×b 的,只有X
和.
中的一种字符的字符矩阵构成。
算法分析
这个题其实也不是很好想,容易糊涂。
我们可以发现,对于每一行,有下列两种情况:
-
连续 b b b 个
X
,然后连续 b b b 个.
,然后再连续 b b b 个X
,然后…… -
连续 b b b 个
.
,然后连续 b b b 个X
,然后再连续 b b b 个.
,然后……
也就是说,我们可以 if
两种情况:先X
后.
以及 先.
后X
。
那又应该怎样讨论呢?
容易发现,如果当前格子(指的是棋盘的格子,就是一共有
r
×
c
r \times c
r×c 个的)的行数为奇数,则先X
后.
,否则为.
后X
。
而对于每一行,可以通过当前的列数奇偶来划分是X
还是.
,具体参见代码。
C o d e Code Code
#include<iostream>
#include<cstdio>
using namespace std;
int r,c,a,b;
int main()
{
scanf("%d%d%d%d",&r,&c,&a,&b);
for(int i=1;i<=r;i++)//格子行数
for(int j=1;j<=a;j++)//字符在字符矩阵中的行数
{
for(int k=1;k<=c;k++)//格子列数
if(i%2==1)//若当前行为先X后.
if(k%2==1)//填入
for(int l=1;l<=b;l++)
cout<<'X';
else
for(int l=1;l<=b;l++)
cout<<'.';
else//若当前行为先.后X
if(k%2==1)
for(int l=1;l<=b;l++)
cout<<'.';
else
for(int l=1;l<=b;l++)
cout<<'X';
cout<<endl;
}
return 0;
}