本文最后更新于 2024-04-03T19:41:36+08:00
Luogu
题目要求根据给定的整数 $n$,输出一个 $2n \times 2n$ 的棋盘,其中每个 $2 \times 2 $的小方块交替使用 # 和 . 构成。
模拟即可,用一个 flag 表示当前应该使用 # 还是 .,使用两层循环来生成棋盘,每次循环是,先根据 flag 的值输出当前行的两个方块,然后翻转 flag 的值,以便下一行使用相反的符号。
每输出完一行,根据 $n$ 的奇偶性来更新 flag 的值,使得下一行的开头与当前行的结尾相反即可,时间复杂度为 $O(n^2)$。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <bits/stdc++.h> using namespace std;
int main() { int T; cin >> T; while (T--) { int n; cin >> n; bool flag = true;
for (int i = 0; i < 2 * n; i += 2) { for (int j = 0; j < 2 * n; j += 2) { if (flag) cout << "##"; else cout << ".."; flag = !flag; } cout << endl; if (n % 2) flag = !flag; for (int j = 0; j < 2 * n; j += 2) { if (flag) cout << "##"; else cout << ".."; flag = !flag; } cout << endl;
if (n % 2 == 0) flag = !flag; } } return 0; }
|