题目一:
低买高卖
棒糖的价格总是在波动的。
假设你已经通过未来机器知道未来连续n天中棒糖的单价(元/斤),在这段时间内,你可以选择某天买进1斤棒糖,而在之后的某天把它们都卖出去(买卖各一次)——当然,你也可以在这段时间里面不进行任何买卖。
如何能够尽可能地挣更多的钱?
设计一个O(n log n)的分治算法。(假设n<=50000)
要求输出最多赚的钱,如果价格持续下跌,则输出“no”。
#include <iostream>
using namespace std;
int main() {
int max=0;
int min=0;
int n;
cin >> n;//输入个数
int *price = new int[n];//价格数组
for (int i = 0; i < n; i++) {
cin >> price[i];//输入价格
}
if(price[0]>price[1]){
min=price[1];
}else if(price[0]<price[1]){
max=price[1];
min=price[0];
}else{
max=price[0];//相等时候随便等于0/1都行,或许可以和上面合并?
min=price[1];
}
for(int j=1;j<n-1;j++){
if(price[j]<price[j+1]){
int money = max-min;
int temp_max=price[j+1];
int temp_min=price[j];
if(money<(temp_max-temp_min)){
max=temp_max;
min=temp_min;
}
}else if(price[j]>price[j+1]){
continue;
}else{
continue;
}
}
if(max-min<0){
cout<<"no";
}else{
cout<<max-min<<endl;
}
return 0;
}
代码运行效果:未能达到格式要求,结果也多有不对,有待改进。