इस समस्या में, हमें एक सरणी 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