使用c语言写出给出一个长度为 n 的整数列 a,选出其中连续且非空的一段,使得这一段数的和最大。 输入 第一行一个正整数,表示数列的长度 n。 第二行几 个整数,第讠个整数表示数列的第讠个整数 a¡(1 ≤i≤ n)。输出 输出一行一个整数表示该数列的最大子段和。
时间: 2024-10-18 17:15:56 浏览: 42
这是一个经典的动态规划问题,可以使用Kadane算法解决,也称为“贪婪算法”。以下是使用C语言编写的基本思路:
```c
#include <stdio.h>
int maxSubArray(int arr[], int size) {
int max_current = arr[0]; // 当前最大值
int max_global = arr[0]; // 最大子数组和
for (int i = 1; i < size; i++) {
max_current = (arr[i] > max_current + arr[i]) ? arr[i] : max_current + arr[i];
if (max_current > max_global)
max_global = max_current;
}
return max_global;
}
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("The maximum subarray sum is: %d\n", maxSubArray(arr, n));
return 0;
}
```
在这个程序中,`maxCurrent`记录了到目前为止遇到的连续子数组的最大和,如果当前元素加上`maxCurrent`的结果大于当前元素本身,说明应该从当前元素开始形成一个新的子数组;否则就添加当前元素到已有的子数组。`maxGlobal`则存储整个过程中找到的最大子数组和。
阅读全文