1 条题解
-
0
自动搬运
来自洛谷,原作者为

ImposterAnYu
I love barbara forever! | q3572195459 wx rzbxs3288,要电话请私信搬运于
2025-08-24 22:32:47,当前版本为作者最后更新于2021-07-31 21:37:29,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
理解题意
这道题就是将一个大小为 的由
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; }
- 1
信息
- ID
- 7059
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者