हमें दो लॉकर दिए गए हैं, जैसे L1 और L2 जिनमें सिक्कों के रूप में कुछ राशि है। L1 में A सिक्के हैं और L2 में B संख्या के सिक्के हैं। हमें लॉकरों से पैसे या सिक्के ऐसे निकालने पड़ते हैं कि निकाला गया पैसा अधिकतम हो। हर बार जब किसी लॉकर से सिक्के निकाले जाते हैं, तो उसे उसकी पिछली गिनती से 1 कम सिक्के से बदल दिया जाता है। यदि हम L1 से A के सिक्के निकालते हैं तो इसे A-1 के सिक्कों से बदल दिया जाएगा और यदि हम L2 से B के सिक्के निकालते हैं तो इसे B-1 के सिक्कों से बदल दिया जाएगा। कार्य दो चरणों में निकाली गई राशि को अधिकतम करना है। इसका मतलब है कि सिक्के केवल दो बार ही निकाले जा सकते हैं।
इनपुट - एल1 - 10, एल2 - 11
आउटपुट −अधिकतम धन जिसे दो चरणों में निकाला जा सकता है – 21
स्पष्टीकरण - चरण 1 में हम L2 से 11 सिक्के निकालते हैं, L2 को 11-1=10 सिक्कों से बदल दिया जाएगा।
चरण 2 में L1 और L2 दोनों में 10 सिक्के हैं इसलिए किसी से भी निकाला जा सकता है और हमारे पास 11+10=21 सिक्के हैं जो अधिकतम हैं।
इनपुट - एल1-5, एल2-5
आउटपुट −अधिकतम धन जिसे दो चरणों में निकाला जा सकता है - 10
स्पष्टीकरण - चरण 1 में हम L1 से 5 सिक्के निकालते हैं, L1 को 5-1=4 सिक्कों से बदल दिया जाएगा।
चरण 2 में दोनों L1 में 4 सिक्के हैं और L2 में 5 सिक्के हैं इसलिए हम L2 से 5 सिक्के लेते हैं और हमारे पास 5+5=10 सिक्के हैं जो अधिकतम हैं।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
हमारे पास कुछ सिक्कों के साथ पूर्णांक के रूप में दो लॉकर L1 और L2 हैं।
-
फ़ंक्शन मैक्समनी (इंट ए, इंट बी) इनपुट के रूप में लॉकर में सिक्कों की संख्या लेता है।
-
मैक्समनी () के अंदर हम अधिकतम राशि को स्टोर करने के लिए परिवर्तनीय 'मनी' लेते हैं।
-
प्रारंभ में पैसा ए या बी से मूल्य लेता है जो भी अधिक हो। (पैसा =ए> बी? ए:बी)
-
पैसे के मूल्य की तुलना A या B से करके देखें कि किस कंटेनर के सिक्के निकाले गए हैं।
-
अब उस कंटेनर को पिछली राशि से 1 कम से बदलें। (ए-- या बी--)
-
फिर से पैसा ए या बी से मूल्य जोड़ देगा जो भी अधिक हो। (पैसा+=ए>बी?ए:बी)
यदि k छोटा है तो सबसे छोटे k तत्वों का योग न्यूनतम होगा - -
D1 में एब्स ((पूरे सरणी का योग) - (2 * कम से कम k तत्वों का योग)) स्टोर करें। दो बार क्योंकि सरणी योग में भी ये तत्व होते हैं।
यदि k बड़ा है तो सबसे बड़े k तत्वों का योग उच्चतम होगा -
-
D2 में एब्स ((पूरे एरे का योग) - (2 * उच्चतम k तत्वों का योग)) स्टोर करें। दो बार क्योंकि सरणी योग में भी ये तत्व होते हैं।
-
D1 की D2 से तुलना करें और अधिकतम मान को maxD में संग्रहित करें।
-
परिणाम के रूप में maxD लौटाएं।
उदाहरण
Code:
#include <stdio.h>
#include <math.h>
// Function to return the maximum coins we can get
int maxMoney(int A, int B){
//take coins
int money=A>B?A:B;
//refill the lockers with 1 less no.of coins
if(money==A)
A--;
else
B--;
//withdraw again
money+=A>B?A:B;
return money;
}
// Driver code
int main(){
int L1 = 8, L2 = 9;
printf("Maximum money that can be withdrawn in two steps: %d" , maxMoney(L1, L2));
return 0;
} आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Maximum money that can be withdrawn in two steps: 17