You need to enable JavaScript to run this app. C++查找和为指定值的连续子数组索引代码输出错误求指导
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:24:01