如何买卖马克或者美元,使得从100美元开始,最后获得最高可能的价值.
【输入格式】
第一行一个自然数n,1<=n<=100,表示天数
接下来n行每行一个自然数a,1<=a<=1000。第i+1行的a表示第i+1天的平均汇率,在这一天,用100美元可以买a马克,a马克也能购买100美元
【输出格式】
一个数据,即最大的价值
注意:结果保留两位小数,最后一天结束前,必须把钱换成美元。
【输入样例】
5
400
300
500
300
250
【输出样例】
266.66
【输入样例】
5
400
300
500
300
250
【输出样例】
266.66
【样例解释】
第一天 换成400马克
第二天 换成133.333美元
第三天 换成666.666马克
第五天 换成266.666美元
点个赞和关注,上代码
#include <iostream>
#include <vector>
#include <iomanip>
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> rates(n);
for (int i = 0; i < n; ++i) {
cin >> rates[i];
}
double money = 100.0; // 初始金额为100美元
bool isDollar = true; // 标记当前持有的货币类型
for (int i = 0; i < n; ++i) {
if (isDollar) { // 当前持有美元
if ((i == n - 1 || rates[i] > rates[i + 1])) {
// 如果是最后一天或今天汇率比明天高,则兑换成马克
money *= rates[i];
isDollar = false;
}
} else { // 当前持有马克
if (rates[i] < rates[i + 1]) {
// 如果今天汇率比明天低,则兑换成美元
money /= rates[i];
isDollar = true;
}
}
}
// 最后一天结束前必须把钱换成美元
if (!isDollar) {
money /= rates[n - 2];
}
cout << fixed << setprecision(2) << money << endl;
return 0;
}
1888

被折叠的 条评论
为什么被折叠?



