给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。可以尽可能多的完成交易(多次买卖一支股票)。 输入:price_arr[](股票价格)。 输出:Maxprofit(最大利润)。 用c语言编写
时间: 2024-11-17 11:29:46 浏览: 47
这个问题通常被称为“股票交易”或“股票最大利润问题”,是一个经典的动态规划问题。你可以通过维护两个变量来解决:`min_price` 存储到目前为止最低的价格,`max_profit` 存储当前为止能够获得的最大利润。
下面是一个简单的 C 语言算法实现:
```c
#include <stdio.h>
int maxProfit(int price[], int n) {
if (n <= 0) return 0; // 如果数组为空,无操作则利润为0
int min_price = price[0]; // 初始化最低价格为第一个价格
int max_profit = 0; // 初始化最大利润为0
// 遍历数组
for (int i = 1; i < n; i++) {
// 更新最低价格
min_price = min(min_price, price[i]);
// 计算卖出当前价格可以获得的利润
int profit = price[i] - min_price;
// 更新最大利润
max_profit = max(max_profit, profit);
}
return max_profit;
}
// 辅助函数,用于找到两数中的较大值
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int price[] = {7, 1, 5, 3, 6, 4}; // 示例股票价格数组
int n = sizeof(price) / sizeof(price[0]);
int result = maxProfit(price, n);
printf("最大利润为: %d\n", result);
return 0;
}
```
在这个程序中,我们遍历整个股票价格数组,每次更新最低价格 `min_price` 和当前最大利润 `max_profit`。当遇到新的低价时,会更新 `min_price`;而当前价减去最低价就是这次交易能赚取的利润,我们用这个利润更新 `max_profit`。最后返回 `max_profit` 即为答案。
阅读全文