Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में स्टॉक खरीदने और बेचने के बाद अधिकतम लाभ

इस समस्या में, हमें एक सरणी stkprice [] दी गई है जो i-वें दिन एक निश्चित स्टॉक की कीमत को दर्शाती है। हमारा काम C++ में स्टॉक खरीदने और बेचने के बाद अधिकतम लाभ की गणना करने के लिए एक प्रोग्राम बनाना है।

समस्या का विवरण - यहां, हमें यह जांचना होगा कि लाभ हासिल करने के लिए स्टॉक को कब खरीदा और बेचा जा सकता है। लाभ प्राप्त करने के लिए, हमें कम कीमत पर स्टॉक खरीदना होगा और कीमत बढ़ने पर उसे बेचना होगा। और जब फिर से ड्रॉप का सामना करना पड़े तो इसे दोहराएं।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

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

आउटपुट

685

स्पष्टीकरण

पहले दिन खरीदने और तीसरे दिन बेचने पर 285 का लाभ मिलेगा।

इसके बाद 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++ में जॉब शेड्यूलिंग में अधिकतम लाभ

    मान लीजिए कि हमारे पास अलग-अलग कार्य हैं, जहां प्रत्येक कार्य प्रारंभ समय [i] से समाप्ति समय [i] तक किया जाना निर्धारित है, उस कार्य के लिए हमें लाभ का लाभ मिलता है [i]। हम स्टार्टटाइम, एंडटाइम और प्रॉफिट लिस्ट को जानते हैं, हमें अधिकतम लाभ का पता लगाना होगा जो हम इस तरह ले सकते हैं कि ओवरलैपिंग टाइ

  1. पायथन में अधिकतम दो बार स्टॉक खरीदने और बेचने के बाद अधिकतम लाभ प्राप्त करने का कार्यक्रम

    मान लीजिए कि हमारे पास कीमतों नामक संख्याओं की एक सूची है और यह कालानुक्रमिक क्रम में किसी कंपनी के स्टॉक की कीमतों का प्रतिनिधित्व कर रही है, तो हमें उस स्टॉक को अधिकतम दो बार खरीदने और बेचने से अधिकतम लाभ प्राप्त करना होगा। हमें पहले खरीदना है फिर बेचना है। इसलिए, यदि इनपुट कीमतों की तरह है =[2,

  1. पायथन में स्टॉक खरीद और बेचकर हम अधिकतम लाभ प्राप्त करने के लिए कार्यक्रम कर सकते हैं?

    मान लीजिए कि हमारे पास कालानुक्रमिक क्रम में किसी कंपनी के स्टॉक की कीमतों की एक सूची है, तो हमें उस स्टॉक को खरीदने और बेचने से होने वाले अधिकतम लाभ का पता लगाना होगा। हमें बेचने से पहले खरीदना चाहिए, और फिर से खरीदने से पहले हमें स्टॉक बेचने के एक दिन बाद इंतजार करना चाहिए। इसलिए, यदि इनपुट कीमतो