Computer >> Máy Tính >  >> Lập trình >> C ++

Mã C ++ để kiếm tiền sau khi mua và bán cổ phiếu

Giả sử chúng ta có hai mảng A kích thước n, và B kích thước m, và một số khác r. Có n cơ hội để mua cổ phiếu. Cổ phiếu thứ i cho phép mua bao nhiêu cổ phiếu tùy thích, giá cổ phiếu thứ i là A [i]. Và cũng có m cơ hội để bán cổ phiếu. Cổ phiếu thứ i cho phép bán bao nhiêu cổ phiếu tùy thích, giá bán cổ phiếu thứ i là B [i]. Chúng tôi không thể bán nhiều hơn số cổ phần chúng tôi có. Nếu chúng ta có r số tiền và không có cổ phiếu hiện có, chúng ta phải tìm số tiền tối đa mà chúng ta có thể giữ sau khi mua và bán.

Vì vậy, nếu đầu vào là A =[4, 2, 5]; B =[4, 4, 5, 4]; r =11, thì sản lượng sẽ là 26, vì chúng ta có 11 lượng tiền. Tối ưu nhất là mua 5 cổ phiếu của một cổ phiếu với giá 2 và sau đó bán tất cả chúng với giá 5. Như vậy cuối cùng chúng ta có được 26 cổ phiếu.

Các bước

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

n := size of A
an := 1100
bn := 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   if an > A[i], then:
      an := A[i]
for initialize i := 0, when i < m, update (increase i by 1), do:
   if bn < B[i], then:
      bn := B[i]
if bn > an, then:
   r := bn * (r / an) + (r - (r / an) * an)
return r

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A, vector<int> B, int r){
   int n = A.size(), m = B.size();
   int an = 1100, bn = 0;
   for (int i = 0; i < n; i++){
      if (an > A[i])
         an = A[i];
   }
   for (int i = 0; i < m; i++){
      if (bn < B[i])
         bn = B[i];
   }
   if (bn > an){
      r = (bn) * (r / an) + (r - (r / an) * an);
   }
   return r;
}
int main(){
   vector<int> A = { 4, 2, 5 };
   vector<int> B = { 4, 4, 5, 4 };
   int r = 11;
   cout << solve(A, B, r) << endl;
}

Đầu vào

{ 4, 2, 5 }, { 4, 4, 5, 4 }, 11

Đầu ra

26