You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写checkerboard3x3.cpp实现3×3方格的自定义宽高棋盘?

实现3×3方块交替的棋盘程序

嘿,这个问题其实很好解决!你之前实现的是单个*和空格交替的棋盘,现在要升级成3×3方块的交替,核心思路就是把行和列按3个一组划分,判断当前位置属于哪一组的区域,再决定输出*还是空格,完全不用纠结整体尺寸是不是3的倍数。

核心逻辑拆解

我们可以把整个棋盘看成是由多个3×3的小方块组成的网格:

  1. 对于每一行i(从0开始计数更方便),用i / 3得到它所属的“行组”(比如第0-2行属于组0,第3-5行属于组1,以此类推)
  2. 同理,每一列j用j / 3得到它所属的“列组”
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:30:10