二维数组wall相邻2计数逻辑错误:代码问题求助
问题排查与修正
嘿,我帮你找到代码里的问题啦,核心是一个运算符写错的低级错误,直接导致了hole的异常扣减:
核心错误点
- 第二个循环的判断条件完全写错了:你把比较相等的
==写成了赋值的-=!原代码里的wall[R-2][i]-=2会直接修改数组中wall[R-2][i]的数值(把它减2),然后判断这个修改后的值是否非零——这完全偏离了你原本要检查「当前位置是2且右侧相邻是2」的需求。这个错误会触发大量不符合条件的hole--操作,这就是hole实际减了7而非预期4的主要原因。
其他逻辑的合理性确认
- 第一个循环的逻辑是对的:遍历
wall[0][C-2]到wall[R-3][C-2],检查每个位置和下方相邻位置是否都是2,完全符合需求。 - 最后的重复修正逻辑也没问题:当
wall[R-2][C-2]的左侧和上方都是2时,它会在两个循环里各被多扣一次,加1修正重复扣减是正确的。
修正后的代码
// 处理列方向:检查wall[0][C-2]~wall[R-3][C-2]的下方相邻2 for(int i=0;i<R-2;i++){ if(wall[i][C-2]==2 && wall[i+1][C-2]==2) hole--; } // 处理行方向:检查wall[R-2][0]~wall[R-2][C-3]的右侧相邻2 for(int i=0;i<C-2;i++){ // 将错误的-=改为正确的==,恢复判断逻辑 if(wall[R-2][i]==2 && wall[R-2][i+1]==2) hole--; } // 修正重复减的情况 if(wall[R-2][C-2]==2 && wall[R-2][C-3]==2 && wall[R-3][C-2]==2) hole++;
你试试这个修正后的代码,应该就能得到预期的hole减4的结果啦!
内容的提问来源于stack exchange,提问作者Codingishard
相关产品推荐
相关产品推荐

