কম্পিউটার টিউটোরিয়াল

C++-এ স্টক কিনে ও বিক্রি করে সর্বোচ্চ লাভ (Maximum profit after buying and selling the stocks)

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

সমস্যার বিবরণ - কম দামে কিনে বেশি দামে বিক্রি করে লাভ করা হবে। দাম কমলে আবার কিনে বেড়লে বিক্রি করব। এই চক্র পুনরাবৃত্তি হবে।

উদাহরণ:

ইনপুট

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

আউটপুট

685

ব্যাখ্যা

১ম দিন কিনে ৩য় দিন বিক্রি: লাভ ২৮৫। ৫ম দিন কিনে ৬ষ্ঠ দিন বিক্রি: লাভ ৪০০। মোট লাভ = ৬৮৫।

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

স্থানীয় ন্যূনতম (local minima) এবং স্থানীয় সর্বোচ্চ (local maxima) খুঁজে বের করুন। ন্যূনতমে কিনে পরবর্তী সর্বোচ্চে বিক্রি করুন। সব ন্যূনতম-সর্বোচ্চ জোড়ার লাভ যোগ করলে সর্বোচ্চ লাভ পাওয়া যাবে।

উদাহরণ (রিকার্শিভ - কম কার্যকর)

#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 "<

আউটপুট

The Maximum profit is 4196007

কার্যকর পদ্ধতি (স্থানীয় ন্যূনতম/সর্বোচ্চ)

উদাহরণ

#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] );
    }
    cout<<"The maximized profit is "<

আউটপুট

The maximized profit is 685
  1. C++-এ জব শিডিউলিং থেকে সর্বোচ্চ প্রফিট (Maximum Profit in Job Scheduling)

  2. C++-এ সর্বোচ্চ এক উপাদান সরিয়ে সাবঅ্যারে যোগফল সর্বাধিক করা

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

  4. পাইথনে কুলডাউন পিরিয়ড সহ স্টক কেনা-বেচা করে সর্বাধিক লাভ বের করার প্রোগ্রাম