题意概括
画出 r×cr \times cr×c 的X、.相间的棋盘,棋盘的每个格子由大小为 a×ba \times ba×b 的,只有X和.中的一种字符的字符矩阵构成。
算法分析
这个题其实也不是很好想,容易糊涂。
我们可以发现,对于每一行,有下列两种情况:
-
连续 bbb 个
X,然后连续 bbb 个.,然后再连续 bbb 个X,然后…… -
连续 bbb 个
.,然后连续 bbb 个X,然后再连续 bbb 个.,然后……
也就是说,我们可以 if 两种情况:先X后. 以及 先.后X。
那又应该怎样讨论呢?
容易发现,如果当前格子(指的是棋盘的格子,就是一共有 r×cr \times cr×c 个的)的行数为奇数,则先X后.,否则为.后X。
而对于每一行,可以通过当前的列数奇偶来划分是X还是.,具体参见代码。
CodeCodeCode
#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;
}
736



被折叠的 条评论
为什么被折叠?



