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

Connect 4落子函数仅两行生效 第三行落子覆盖第二行问题求解

代码逻辑问题
  • 循环被强制中断:for循环末尾执行i = 0,导致循环最多执行1次后就会因i自减为-1退出,永远只能遍历列的最底部1-2行,无法处理更高行的落子逻辑。
  • 落子判断逻辑混乱:原代码没有遵循四子棋「从列底向上找第一个空位落子」的规则,两个if判断没有互斥和跳出逻辑,找到已有棋子时直接在上一行赋值,会覆盖上一行的已有内容。
  • 存在越界风险:当遍历到第0行时如果该行已有棋子,i-1会得到-1,触发数组越界访问。
修复方案

正确逻辑为:从目标列的最底部开始向上遍历,找到第一个空格后放置棋子,直接跳出循环即可。

const int N = 200;
const string usr1 = "o", usr2 = "x";
void updateBoard(string a[N][N], int c, int n, string xo) {
  int col = c - 1;
  // 从列的最底部行开始向上遍历
  for (int i = n - 1; i >= 0; i--) {
    if (a[i][col] == " ") {
      a[i][col] = xo;
      // 落子完成直接退出循环
      break;
    }
  }
  // 可扩展:如果遍历完所有行都没找到空格,说明当前列已满,可增加抛出错误/提示逻辑
}

内容的提问来源于stack exchange,提问作者lukakone Konečnik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:36:03