Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

รหัส C++ หาเงินหลังซื้อหุ้น


สมมติว่าเรามีอาร์เรย์ A สองขนาด n และ B ขนาด m และอีกจำนวนหนึ่ง r ไม่มีโอกาสในการซื้อหุ้น i-th ของพวกเขาอนุญาตให้ซื้อหุ้นได้มากเท่าที่เราต้องการ โดยราคาหุ้นคือ A[i] และยังมีโอกาสในการขายหุ้นอีกด้วย i-th ของพวกเขาช่วยให้ขายหุ้นได้มากเท่าที่เราต้องการ ราคาขายของหุ้น ith คือ B[i] เราไม่สามารถขายหุ้นได้มากกว่าที่เรามี ถ้าเรามีเงินจำนวน r และไม่มีหุ้นอยู่ เราต้องหาจำนวนเงินสูงสุดที่เราถือได้หลังจากซื้อและขาย

ดังนั้น ถ้าอินพุตเป็น A =[4, 2, 5]; B =[4, 4, 5, 4]; r =11 แล้วผลลัพธ์จะเป็น 26 เพราะเรามีเงิน 11 จำนวนเงิน เป็นการดีที่สุดที่จะซื้อหุ้น 5 หุ้นที่ราคา 2 แล้วขายทั้งหมดในราคา 5 ดังนั้นเราจะได้ 26 ในตอนท้าย

ขั้นตอน

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

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

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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;
}

อินพุต

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

ผลลัพธ์

26