卡车过沙漠问题用C++递推法
时间: 2024-05-10 16:20:31 浏览: 138
卡车过沙漠问题 C#
以下是一种C语言的递推算法实现:
```c
#include <stdio.h>
int main() {
int n, k, i;
long long a[100000], b[100000];
scanf("%d%d", &n, &k);
for (i = 0; i < n; i++) {
scanf("%lld", &a[i]);
}
b[0] = a[0];
for (i = 1; i < n; i++) {
if (i <= k) {
b[i] = b[i - 1] + a[i];
} else {
b[i] = b[i - 1] + a[i] - a[i - k - 1];
}
}
for (i = 0; i < n; i++) {
printf("%lld ", b[i]);
}
return 0;
}
```
该算法通过一个数组b来记录卡车行进过程中的沙漠距离累计值。数组b的第i个元素表示:前i个沙漠的累计距离。初始值为a[0],之后每个元素的值根据卡车行驶的距离累加计算得到。当i <= k时,表示卡车行进的距离不足k个沙漠,此时直接累加a[i];当i > k时,表示卡车已经行进k个沙漠,此时需要减去前面第i-k-1个沙漠的距离,再加上a[i],即可得到当前的沙漠距离累计值。最后输出数组b中的所有元素即可。
阅读全文