কম্পিউটার

C++ এ স্টক ক্রয়-বিক্রয়ের পর সর্বোচ্চ লাভ


এই সমস্যায়, আমাদের একটি অ্যারে দেওয়া হয়েছে stkprice[] যা i-th দিনে নিশ্চিত স্টকের মূল্য নির্দেশ করে। আমাদের কাজ হল C++ এ স্টক ক্রয়-বিক্রয়ের পর সর্বাধিক লাভের হিসাব করার জন্য একটি প্রোগ্রাম তৈরি করা।

সমস্যা বর্ণনা − এখানে, মুনাফা অর্জনের জন্য কখন স্টক কেনা এবং বিক্রি করা যায় তা আমাদের পরীক্ষা করতে হবে। মুনাফা অর্জনের জন্য, আমাদেরকে কম দামে স্টক কিনতে হবে এবং দাম বাড়লে বিক্রি করতে হবে। এবং যখন আবার ড্রপের সম্মুখীন হয় তখন একই পুনরাবৃত্তি করুন।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

stkprice[] = {120, 310, 405, 210, 150, 550}

আউটপুট

685

ব্যাখ্যা

১ম দিনে কিনলে এবং ৩য় দিনে বিক্রি করলে ২৮৫ লাভ হবে।

এর পরে, 5 তম দিনে কেনাকাটা এবং 6 তম দিনে বিক্রি করলে 400 লাভ হবে৷

এটি মোট লাভ করে (400 + 285) =685

সমাধান পদ্ধতি

একটি সহজ সমাধান ক্রয়-বিক্রয় চক্রের সম্ভাব্য সমস্ত সমন্বয় পরীক্ষা করা হবে। ক্রয়-বিক্রয় চক্রের সংমিশ্রণ চেষ্টা করুন প্রতিদিন থেকে বর্তমান দিনের জন্য শেষের প্রথম বিক্রি কেনা পর্যন্ত। এবং সেই চক্রটি গ্রহণ করা যা সর্বোচ্চ মুনাফা দেয়।

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include <iostream>
using namespace std;
int max(int a, int b){
   if(a > b)
      return a;
      return b;
}
int MaximizeProfit(int stkPrice[], int firstDay, int lastDay){
   if (lastDay <= firstDay)
      return 0;
   int maxProfit = 0;
   for (int i = firstDay; i < lastDay; i++) {
      for (int j = i + 1; j <= lastDay; j++) {
         if (stkPrice[j] > stkPrice[i]) {
            int profit = ( stkPrice[j] - stkPrice[i] ) + MaximizeProfit(stkPrice, firstDay, i - 1) + MaximizeProfit(stkPrice, j + 1, lastDay);
            maxProfit = max(maxProfit, profit);
         }
      }
   }
   return maxProfit;
}
int main(){
   int stkPrice[] = { 120, 310, 405, 210, 150, 550 };
   int days = 6 ;
   cout<<"The Maximum profit is "<<MaximizeProfit(stkPrice, 0, days);
   return 0;
}

আউটপুট

The Maximum profit is 4196007

একটি আরও কার্যকর সমাধান প্রতিটি ট্রেডের জন্য সর্বাধিক মুনাফা খুঁজে বের করে তাদের কাছ থেকে সর্বাধিক লাভ খোঁজার উপর ভিত্তি করে। বাণিজ্য দিবসের জন্য স্থানীয় মিনিমা এবং ম্যাক্সিমা খুঁজে বের করে এটি করা যেতে পারে। স্থানীয় মিনিমা হল সেই দিনগুলি যেখানে স্টকের মূল্য তার আগের এবং পরের দিনের চেয়ে কম থাকে। অ্যান্ডম্যাক্সিমা মিনিমার বিপরীত। যদি স্থানীয় মিনিমাম না থাকে (সূচক 0 থেকে n-2 এর মধ্যে), তাদের দিনগুলি লাভজনক হতে পারে না৷

সর্বাধিক লাভের জন্য, আমরা স্থানীয় মিনিমায় শেয়ার কিনব এবং পরবর্তী স্থানীয় ম্যাক্সিমায় এটি বিক্রি করব এবং মিনিমা-ম্যাক্সিমা জোড়ার জন্যও একই কাজ করব। সমস্ত মিনিমাম-ম্যাক্সিমা লাভ যোগ করলে আমরা সর্বোচ্চ লাভ পাব।

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include <iostream>
using namespace std;
void MaximizeProfit(int price[], int n){
   if (n == 1)
      return;
   int maxProfit = 0;
   int i = 0;
   while (i <= n - 1) {
      while ((i <= n - 2) && (price[i + 1] <= price[i]))
         i++;
         int minima = i++;
      while ((i < n) && (price[i] >= price[i - 1]))
         i++;
      int maxima = i - 1;
      maxProfit += (price[maxima] - price[minima] );
      // For displaying profit for one minima-maxima cycle
      //cout <<"Stock bought on day "<<(minima+ 1 )<<" and Sold
      on day "<<(maxima+1) <<" at a profit of "<<(price[maxima] - price[minima] )<<"\n";
   }
   cout<<"The maximized profit is "<<maxProfit;
}
int main(){
   int stkPrice[] = { 120, 310, 405, 210, 150, 550 };
   int days = 6;
   MaximizeProfit(stkPrice, days);
   return 0;
}

আউটপুট

The maximized profit is 685

  1. C++ এ কাজের সময়সূচীতে সর্বোচ্চ লাভ

  2. C++ এ সর্বাধিক একটি উপাদান মুছে ফেলার পরে সর্বাধিক সাবয়ারের যোগফল সর্বাধিক করুন

  3. পাইথনে সর্বাধিক দুইবার স্টক ক্রয়-বিক্রয়ের পরে সর্বাধিক লাভের সন্ধান করার প্রোগ্রাম

  4. পাইথনে স্টক ক্রয়-বিক্রয় করে আমরা সর্বোচ্চ মুনাফা অর্জন করতে পারি?