#include <stdio.h>

int mis(int a[], const int n) { int max_sum = a[0]; // 初始化最大子段和为第一个元素 int current_sum = a[0]; // 当前子段和为第一个元素

for (int i = 1; i < n; i++) {
    // 如果当前子段和加上当前元素大于当前元素本身,则将当前元素加入子段中
    if (current_sum + a[i] > a[i]) {
        current_sum += a[i];
    } else {
        // 如果当前子段和加上当前元素小于等于当前元素本身,则将当前元素作为新的子段的起点
        current_sum = a[i];
    }

    // 更新最大子段和
    if (current_sum > max_sum) {
        max_sum = current_sum;
    }
}

return max_sum;

}

int main() { int a[1024]; int N = 0; scanf("%d", &N); for (int i = 0; i < N; i++) scanf("%d", &a[i]);

printf("maximum internal sum = %d", mis(a, N));
return 0;

}

C语言实现最大子段和算法 - mis函数详解

原文地址: http://www.cveoy.top/t/topic/in2s 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录