SAHOVNICA
Forgotten_freopen · · 题解
理解题意
这道题就是将一个大小为 X 和 . 组成的交叉矩阵(自定义名称)的长变为原来的
交叉矩阵的定义:一个大小为 s 和 b 组成的交叉矩阵如下:
sbsbs
bsbsb
sbsbs
(默认靠前的那个字符为矩阵的第一个字符!)
1
我们可以先把一个大小为 X 和 . 组成的交叉矩阵构造出来(设矩阵为
我们可以发现:当 X;否则,.。
所以,代码的其中一部分就出来啦!
for(i = 1; i <= r; i++){
for(j = 1; j <= c; j++){
x[i][j] = ((i + j) % 2? '.' : 'X');//用三目运算符判断当前位置上是哪个字符。
}
}
2
那怎样得到最后的输出呢?
对比一下样例
X.X.
.X.X
和最后的输出:
XX..XX..
XX..XX..
..XX..XX
..XX..XX
发现没?其中的
那么如果
没毛病吧?
for(i = 1; i <= r * a; i++){
for(j = 1; j <= c * b; j++){
cout<< x[(i - 1) / a + 1][(j - 1) / b + 1] ;//核心公式!
}
cout<< endl;
}
整道题就这么讲完啦!
3(坑)
不要输出空格!不要输出空格!绝对不要输出空格!!!
(不知道为什么,输出空格还能A两个点……)
AC code
#include<bits/stdc++.h>
using namespace std;
int r,c,a,b,i,j;
char x[15][15];
int main(){
cin >> r >> c >> a >> b;
for(i = 1; i <= r; i++){
for(j = 1; j <= c; j++){
x[i][j] = ((i + j) % 2? '.' : 'X');//用三目表达式判断当前位置上是哪个字符。
}
}
for(i = 1; i <= r * a; i++){
for(j = 1; j <= c * b; j++){
cout<< x[(i - 1) / a + 1][(j - 1) / b + 1] ;//核心公式!
}
cout<< endl;
}
return 0;
}