求数列的最大子段和,用c语言,请给我一个能运行的代码
时间: 2024-11-13 09:39:51 浏览: 3
在C语言中,可以使用Kadane算法来解决最大子数组和的问题,这是一种动态规划方法。以下是简单的Kadane算法的实现:
```c
#include <stdio.h>
int maxSubArraySum(int arr[], int size) {
int max_current = arr[0]; // 当前最大值
int max_global = arr[0]; // 最大全局和
for (int i = 1; i < size; i++) {
max_current = max(arr[i], max_current + arr[i]); // 更新当前最大值
if (max_current > max_global)
max_global = max_current; // 如果当前更大,更新全局最大值
}
return max_global;
}
// 辅助函数,返回两个整数中的较大者
int max(int a, int b) {
return (a > b) ? a : b;
}
int main() {
int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
int n = sizeof(arr) / sizeof(arr[0]);
int result = maxSubArraySum(arr, n);
printf("最大的子数组和是 %d\n", result);
return 0;
}
```
这个程序首先初始化`max_current`为第一个元素,然后遍历整个数组,对于每个元素,它要么添加到当前连续正和(如果当前元素大于0),要么从零开始计算新的连续正和(如果当前元素小于0)。同时,会跟踪`max_global`以保持全局范围内的最大和。
当你运行这个程序,它会输出给定数组中最大子数组的和。
阅读全文