如何编写checkerboard3x3.cpp实现3×3方格的自定义宽高棋盘?
实现3×3方块交替的棋盘程序
嘿,这个问题其实很好解决!你之前实现的是单个*和空格交替的棋盘,现在要升级成3×3方块的交替,核心思路就是把行和列按3个一组划分,判断当前位置属于哪一组的区域,再决定输出*还是空格,完全不用纠结整体尺寸是不是3的倍数。
核心逻辑拆解
我们可以把整个棋盘看成是由多个3×3的小方块组成的网格:
- 对于每一行
i(从0开始计数更方便),用i / 3得到它所属的“行组”(比如第0-2行属于组0,第3-5行属于组1,以此类推) - 同理,每一列
j用j / 3得到它所属的“列组” - 棋盘的交替规则:当行组和列组的奇偶性相同时,这个位置属于
*方块区域;否则属于空格方块区域。这样就能实现3×3的方块交替,哪怕边缘是不完整的方块也能延续规律。
完整代码实现
#include <iostream> using namespace std; int main() { int width, height; cout << "请输入宽度和高度: "; cin >> width >> height; for (int i = 0; i < height; ++i) { // 判断当前行所在的3行组是奇数组还是偶数组 int row_group = i / 3; bool is_star_row = (row_group % 2 == 0); for (int j = 0; j < width; ++j) { // 判断当前列所在的3列组是奇数组还是偶数组 int col_group = j / 3; bool is_star_col = (col_group % 2 == 0); // 行组和列组奇偶性一致时输出*,否则输出空格 cout << (is_star_row == is_star_col ? '*' : ' '); } cout << endl; } return 0; }
代码关键部分解释
- 整数除法的妙用:
i / 3和j / 3会自动向下取整,帮我们快速把行/列划分成3个一组的区块,不用手动写复杂的区间判断。 - 奇偶性判断:
row_group % 2和col_group % 2用来确定当前组是“*组”还是“空格组”,偶数组对应*,奇数组对应空格(反过来也可以,只要保持行和列的判断逻辑一致就行)。 - 三元运算符简化代码:
cout << (is_star_row == is_star_col ? '*' : ' ');是if-else的简写,让代码更简洁。
测试效果示例
比如输入宽度7,高度5,程序会输出:
*** *** *** *** *** *** *** ***
可以看到,哪怕宽度不是3的倍数(7=3×2+1),高度也不是(5=3×1+2),边缘的不完整方块依然遵循了3×3交替的规律,完全符合你的需求。
内容的提问来源于stack exchange,提问作者MLWeegee
相关产品推荐
相关产品推荐

