编写一个c语言程序,计算一个正整数数组所有奇数长度子数组的和
时间: 2024-10-20 21:12:31 浏览: 26
要在C语言中编写一个程序来计算一个正整数数组中所有奇数长度子数组的和,你可以使用滑动窗口技巧。这里是一个简单的示例代码:
```c
#include <stdio.h>
int sum_odd_length_subarrays(int arr[], int n) {
int window_sum = 0;
int start = 0, end = 0;
// 循环直到窗口结束(end超过数组范围)
while (end < n) {
// 如果当前窗口长度是奇数
if ((end - start + 1) % 2 != 0) {
window_sum += arr[end]; // 将当前元素添加到窗口总和
}
// 移动右边界
end++;
// 更新左边界,当窗口右移一位而长度变为偶数时
if ((end - start + 1) % 2 == 0 && start < end - 1) {
start++; // 右移一位,窗口开始新的奇数长度
window_sum -= arr[start - 1]; // 从窗口总和中减去移动掉的旧元素
}
}
return window_sum;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Sum of odd length subarrays: %d\n", sum_odd_length_subarrays(arr, n));
return 0;
}
```
这个程序首先初始化两个指针`start`和`end`,代表子数组的左右边界。它不断地更新这两个指针,同时检查窗口长度是否为奇数。如果是,就将当前元素加入到窗口总和中。如果窗口长度变为偶数,就开始向右移动`start`并减去移动掉的旧元素,以便保持窗口长度为奇数。
运行上述程序后,它会打印出给定数组所有奇数长度子数组的和。
阅读全文