You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算数组严格递增序列的最大和?C语言代码调试求助

修复严格递增子序列最大和计算的代码错误

原代码的核心错误

  • 第二个循环中每次将max重置为arr[0],完全破坏了递增序列的跟踪逻辑,无法正确判断当前元素是否属于当前递增子序列。
  • 判断逻辑混乱:if(max<arr[i])更新max后,后续的if(max>arr[i])永远不会成立(因为max已经等于arr[i]),导致循环不会提前终止,最终会累加所有元素的和,和需求完全不符。
  • 没有考虑数组中存在多个不连续递增子序列的情况(比如测试用例中的4、5是另一个递增子序列),无法比较不同子序列的和来找到最大值。

修正后的代码

我们采用线性遍历维护当前序列的方法,逻辑直观且高效:

#include <stdio.h>

int main(){
    int size;
    printf("Enter the size: ");
    scanf("%d", &size);
    int arr[size];

    for(int i = 0; i < size; i++){
        printf("Enter element #%d: ", i+1);
        scanf("%d", &arr[i]);
    }

    if(size == 0){
        printf("Largest sum = 0");
        return 0;
    }

    int current_sum = arr[0];
    int max_sum = arr[0];

    for(int i = 1; i < size; i++){
        // 当前元素大于前一个,加入当前递增序列的和
        if(arr[i] > arr[i-1]){
            current_sum += arr[i];
        } else {
            // 不满足递增,重置当前序列和为当前元素,开启新序列
            current_sum = arr[i];
        }
        // 更新全局最大和
        if(current_sum > max_sum){
            max_sum = current_sum;
        }
    }

    printf("Largest sum = %d", max_sum);
    return 0;
}

代码逻辑说明

  1. 初始化current_sum(当前递增子序列的和)和max_sum(全局最大和)为数组第一个元素。
  2. 从第二个元素开始遍历:
    • 若当前元素大于前一个,说明属于当前递增序列,将其加入current_sum。
    • 若不满足严格递增,说明当前序列结束,重置current_sum为当前元素,开始新的递增序列。
  3. 每次遍历后,比较current_sum和max_sum,更新全局最大和。
  4. 加入了数组为空的边界处理,提升代码鲁棒性。

测试验证:

  • 输入2 4 5 1 7 3时,current_sum依次为2→6→11→1→8→3,max_sum最终为11,符合预期。
  • 输入2 3 10 4 5时,current_sum依次为2→5→15→4→9,max_sum最终为15,匹配正确结果。

内容的提问来源于stack exchange,提问作者tiredcomscistudent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:10:31