C++多数组重复元素检测问题:洛书幻方checkUnique函数异常排查
洛书幻方唯一性检测函数修正方案
你的checkUnique函数存在三个关键错误,导致无法正确检测元素唯一性:
错误分析
合并数组笔误:
初始化combinedArray时,误将arrayRow2[2]写成了arrayRow3[2],导致合并后的数组包含重复的arrayRow3[2]元素。比如输入1 2 3 4 5 6 7 8 9时,合并数组会变成[1,2,3,4,5,9,7,8,9],直接出现重复值。循环起始值错误:
内层循环j从counter开始,需要额外判断j != counter,且会导致重复比较同一元素。正确的做法是让j从counter + 1开始,只比较当前元素之后的所有元素。返回时机错误:
原代码在每次内层循环的第一次迭代就执行return false,导致函数提前退出,完全没有完成所有元素的检查逻辑。
修正后的代码
以下是修复后的函数(假设函数返回true表示存在重复元素,返回false表示所有元素唯一,匹配你的调用场景):
bool checkUnique(int arrayRow1[], int arrayRow2[], int arrayRow3[], int TOTAL_NUM) { // 修复合并数组的笔误,正确包含arrayRow2的第三个元素 int combinedArray[] = { arrayRow1[0], arrayRow1[1], arrayRow1[2], arrayRow2[0], arrayRow2[1], arrayRow2[2], arrayRow3[0], arrayRow3[1], arrayRow3[2] }; // 遍历每个元素 for (int counter = 0; counter < TOTAL_NUM; counter++) { // 从当前元素的下一个位置开始比较,避免重复检查 for (int j = counter + 1; j < TOTAL_NUM; j++) { if (combinedArray[counter] == combinedArray[j]) { // 发现重复,立即返回true return true; } } } // 所有元素检查完毕,无重复则返回false return false; }
如果你的调用逻辑需要函数返回true表示所有元素唯一,只需调换返回值:
- 发现重复时返回
false - 循环结束后返回
true
内容的提问来源于stack exchange,提问作者Tae Im
相关产品推荐
相关产品推荐

