2015-11-12 1 views
-3

Наш профессор хочет, чтобы мы написали некоторый код, чтобы немного рассчитать о финансовом инструменте, купить дешево и продать высокую цену. Цены меняются со временем. например, ввод {1,2,4}, поэтому мы можем купить 1 и продать как 2, а купить 2 продать 4. так что выход должен быть 1 + 2 = 3. И если входные данные {4,2,1}, мы не можем покупать низко и продавать высоко. поэтому выход должен быть 0. и вот мой код.В моем коде на C++ есть странная ошибка

#include<iostream> 
#include<vector> 

using namespace std; 

int getMaxProfit(vector<int> &prices) 
{ 
int p; 
int n=0; 
vector<int> profits; 

if(prices.size()==1) 
{ 
    return 0; 
} 

for(int i=0; i<prices.size();i++) 
{ 
    if (prices[i]<prices[i+1]) 
    { 
     p=prices[i+1]-prices[i]; 
     profits.push_back(p); 
    } 

} 

for(int i=0; i<profits.size();i++) 
{ 
    n=n+profits[i]; 

} 


return n; 
} 

int main() 
{ 
vector<int> prices = {1,2,4}; 

cout<<getMaxProfit(prices); 

return 0; 
} 

Это работает очень хорошо, когда на моем входе всего 4 или меньше значения. Однако, если имеется более 4 значений, например {1,1,2,3,4}. Я получу неправильный ответ. Я не могу понять, что в этом плохого.

+0

'если (цены [I] <цены [я + 1])' доступы вне границ массива на последней итерации –

+0

@ M.M спасибо за Ваш ответ! Я узнаю, что не так –

ответ

2

Хорошо, я понял. Немного изменил мой код, и он сработал.

#include<iostream> 
#include<vector> 

using namespace std; 

int getMaxProfit(vector<int> &prices) 
{ 
int p; 
int n=0; 
vector<int> profits; 

if(prices.size()==1) 
{ 
    return 0; 
} 
p = prices[0]; 
for(int i=1; i<prices.size();i++) 
{ 
    if (p<prices[i]) 
    { 
     n=prices[i]-p; 
     profits.push_back(n); 
     p=prices[i]; 
    } 
    else 
    { 
     p =prices[i]; 
    } 
} 
n=0; 

for(int i=0; i<profits.size();i++) 
{ 
    n=n+profits[i]; 

} 


return n; 
} 

int main() 
{ 
vector<int> prices = {3,1,5,2,4}; 

cout<<getMaxProfit(prices); 

return 0; 
} 
+0

Вы поняли, в чем проблема? Подсказка: 'цены [i + 1]'. –

+0

@ KarolyHorvath да, я понял! Спасибо! –

Смежные вопросы