请求排查用于查找数组重复元素的C++代码失效原因
分析这段查找重复数字的C++代码问题
这段代码确实没法正确实现查找数组重复数字的功能,我帮你拆解几个关键问题:
内层循环起始位置错误,会误判自身为重复
现在内层循环的j从1开始,这会导致当i == j时(比如i=4、j=4,对应数组里的第5个元素15),程序会把元素和自身判定为重复。我们要找的是不同位置的相同元素,正确的做法应该让j从i+1开始,这样每个元素只和它后面的元素对比,避免无意义的自身比较。找到重复后没有终止所有循环,可能覆盖结果
当前代码里的break只能跳出内层循环,外层循环还会继续执行。比如如果数组里有多个重复对(比如{12,13,13,15,15,10}),程序最后输出的会是最后一个被找到的重复值(这里是15),而不是第一个出现的重复值。变量
n未初始化,存在未定义行为
你只定义了int n;但没有给初始值。如果数组里没有任何重复元素,这个变量会保持未初始化的状态,直接cout<<n会输出随机的垃圾值,这属于C++里的未定义行为,结果完全不可控。未处理数组无重复的场景
代码默认数组一定存在重复,但实际场景中可能没有重复元素,这时候应该给出明确提示,而不是输出无意义的值。
修正后的示例代码
这里是修复了所有问题的版本,逻辑更严谨:
#include <iostream> using namespace std; int main() { int arr[] = {12,13,14,15,15,10}; int size = sizeof(arr)/sizeof(int); int n = -1; // 用数组中不会出现的值初始化,作为无重复的标记 bool foundDuplicate = false; // 标记是否找到重复 for (int i = 0; i < size && !foundDuplicate; i++) { for (int j = i + 1; j < size; j++) { if (arr[i] == arr[j]) { n = arr[i]; foundDuplicate = true; break; // 找到重复后跳出内层循环 } } } if (foundDuplicate) { cout << "找到重复数字:" << n << endl; } else { cout << "数组中没有重复数字" << endl; } return 0; }
内容的提问来源于stack exchange,提问作者Shreyansh Srivastava
相关产品推荐
相关产品推荐

