1 条题解
-
0
📝 题目大意
有一个 的瓷砖,以 行 列排列,形成 的格子图。瓷砖 为白色,相邻瓷砖颜色不同(类似国际象棋棋盘)。用
.表示白色、#表示黑色,输出整个格子图。💡 解题思路
-
题目分析:,数据范围极小,直接模拟即可。核心是确定每个位置属于哪个瓷砖以及该瓷砖的颜色。
-
算法推导:
- 瓷砖的颜色由其在 排列中的行列位置 决定:若 为偶数则为白色(
.),奇数则为黑色(#)。这等价于标准的棋盘染色,且满足 为白色、相邻瓷砖异色的条件。 - 代码中
flag变量控制当前瓷砖行的起始颜色(flag = true表示该行起始瓷砖为白色.,flag = false表示起始为黑色#)。每处理完一行瓷砖,flag取反。 - 对于每个瓷砖行,
flag1控制当前瓷砖列的颜色,初始值flag1 = !flag使得瓷砖行之间颜色交替。每输出完一个瓷砖的 列后,flag1取反。 - 外层两层循环(
i为瓷砖行,j为瓷砖内的行)控制输出总行数 ;内层两层循环(k为瓷砖列,l为瓷砖内的列)控制输出每行的 个字符。
- 瓷砖的颜色由其在 排列中的行列位置 决定:若 为偶数则为白色(
-
边界与细节:
- 注意
flag1的初始值!flag:当i=0时flag=true,flag1=false,输出.,符合瓷砖 为白色的要求。 - 每行输出结束后需要换行(
endl)。 - 数据范围小,无需优化。
- 注意
⏱️ 复杂度分析
- 时间复杂度:,即输出总格子数 ,最多 量级。
- 空间复杂度:,仅使用常数个变量。
💻 标准代码 (C++)
#include <bits/stdc++.h> using namespace std; int main () { int n, a, b; cin >> n >> a >> b; bool flag = true; // 当前瓷砖行的起始颜色:true 表示该行第一个瓷砖为白色(.) for (int i = 0; i < n; i++) { // 遍历瓷砖行(共 N 行瓷砖) for (int j = 0; j < a; j++) { // 每个瓷砖有 A 行,重复输出 bool flag1 = !flag; // 当前瓷砖行第一个瓷砖的颜色:!flag 实现行间交替 for (int k = 0; k < n; k++) { // 遍历瓷砖列(共 N 列瓷砖) for (int l = 0; l < b; l++) { // 每个瓷砖有 B 列 if (flag1) { cout << "#"; // 黑色瓷砖 } else { cout << "."; // 白色瓷砖 } } flag1 = !flag1; // 切换到下一个瓷砖列,颜色取反 } cout << endl; // 一行输出完毕 } flag = !flag; // 切换到下一行瓷砖,起始颜色取反 } return 0; } -
- 1
信息
- ID
- 604
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者