C++查找和为指定值的连续子数组索引代码输出错误求指导
代码问题排查及修正
存在的问题列表
- 不符合C标准的变长数组用法:C标准不允许用普通int变量作为数组长度定义静态数组,你代码里的
int n; n=4; int arr[n];属于编译器扩展语法,可移植性差。 - curr累加变量未重置:每次外层循环切换新的子数组起点i时,没有将curr重置为0,导致后续子数组的和会累加之前所有遍历过的元素值,计算结果完全错误。
- 匹配成功后输出内容不全:只打印了起始索引i,没有打印对应的结束索引j,也没有做后续逻辑处理。
- 输入逻辑冲突:sum先被赋值为5,后续又用
cin>>sum读取用户输入,既会覆盖预设值,不需要用户输入的场景下还会导致程序阻塞等待输入。 - 多余的调试输出:内层循环里的
cout<<curr<<endl;是调试用代码,会输出大量无关内容干扰最终结果。
修正后的可运行代码
#include <iostream> using namespace std; int main() { // 用const修饰保证数组长度是编译期常量,符合C++标准 const int n = 4; int arr[n] = {1,2,3,8}; int target_sum = 5; // 如果需要用户输入目标和,取消注释下面一行即可 // cin >> target_sum; for(int i = 0; i < n; i++){ // 每个新起点i开始计算子数组和时,先重置curr为0 int curr = 0; for(int j = i; j < n; j++){ curr += arr[j]; if(curr == target_sum){ cout << "匹配到的子数组:起始索引" << i << ",结束索引" << j << endl; // 因为数组元素都是非负整数,后续j增大sum只会更大,直接跳出内层循环即可 break; } } } return 0; }
运行结果说明
用示例参数(数组[1,2,3,8],目标和5)运行,会输出匹配到的子数组:起始索引1,结束索引2,对应的子数组是[2,3],和为5,符合预期。
内容的提问来源于stack exchange,提问作者Diksha Nasa
相关产品推荐
相关产品推荐

