题意概括
画出 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;
}
该篇博客介绍了一个用于创建X和.相间的棋盘图案的算法。算法通过判断行数的奇偶性来决定每行的字符顺序,对于每一行,再根据列数的奇偶性填充X或.。代码实现中使用了嵌套循环,根据给定的棋盘大小和字符矩阵尺寸动态生成棋盘图案。

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



