有一个长度为n的序列a,选出其中连续且非空的一一段整数且使得这段整数之和最大。使用C语言编写代码
时间: 2024-12-19 20:24:07 浏览: 21
在C语言中,为了找到一个长度为n的整数序列a中连续且非空的最大整数和,你可以使用Kadane's Algorithm(卡特兰算法)。这是一种动态规划算法,步骤如下:
1. 初始化两个变量:`max_sum`用于记录当前找到的最大子数组和,初始化为第一个元素;`current_sum`用于累加,初始也为第一个元素。
2. 遍历数组a,从第二个元素开始:
a. 更新`current_sum`,如果加上当前元素比当前元素本身大,则`current_sum`加当前元素,否则`current_sum`清零并设置为当前元素。
b. 比较`current_sum`和`max_sum`,如果`current_sum`更大,就更新`max_sum`。
3. 最终`max_sum`即为所需的连续非空整数子数组的最大和。
下面是C语言的示例代码:
```c
#include <stdio.h>
int maxSubArraySum(int arr[], int size) {
if (size == 0)
return 0;
int max_sum = arr[0];
int current_sum = arr[0];
for (int i = 1; i < size; i++) {
current_sum = (arr[i] > current_sum + arr[i]) ? arr[i] : current_sum + arr[i];
max_sum = max(max_sum, current_sum);
}
return max_sum;
}
int main() {
int n;
printf("Enter the length of the array: ");
scanf("%d", &n);
int a[n];
printf("Enter the elements of the array: ");
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int result = maxSubArraySum(a, n);
printf("The maximum sum of a non-empty consecutive subarray is %d.\n", result);
return 0;
}
```
阅读全文