代码如下:
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int day;
int flg_to_money = 0; // 找到最小值
int flg_to_future = 0; // 找到最大值
int min_targ_day = 0;
int max_targ_day = 0;
int flg_start = 0;
int a[100];
float money = 100.0;
cin >> day;
for (int i = 0; i < day; i++)
{
cin >> a[i];
}
for (int i = 1; i < day; i++)
{
/* 找出最高点 大于最大值 */
if (a[i] > a[i - 1] && a[i + 1] < a[i] )
{
max_targ_day = i;
flg_to_future = 1;
flg_start = 1;
}
// 初始为下降
if (a[i] < a[i - 1] && flg_start == 0)
{
flg_start = 1;
max_targ_day = 0;
flg_to_future = 1;
}
// 找最小点
if ((a[i] < a[i - 1] && a[i] < a[i + 1] && flg_to_future == 1))
{
min_targ_day = i;
flg_to_money = 1;
}
// 最后一点的特殊处理
if ((i == day - 1) && (a[i] < a[i - 1]))
{
min_targ_day = i;
flg_to_money = 1;
}
// 最大值最小值均找到,且到了下一个下降点
if (a[i] < a[i - 1] && flg_to_future == 1 && flg_to_money == 1)
{
money = money * a[max_targ_day] / 100;
money = money / a[min_targ_day] * 100;
flg_to_future = 0;
flg_to_money = 0;
max_targ_day = i - 1;
min_targ_day = i;
}
}
cout << money << endl;
return 0;
}
思路为寻找汇率的拐点,进行成对的交易,其中分别对起始和结尾做了特殊处理,但是测试用例的第四个和后面四个错了,求大佬帮助