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

C++ में घरों से चुराए जा सकने वाले अधिकतम संभावित मूल्य ज्ञात करें


इस समस्या में, हमें कुछ मूल्यों वाले n घर दिए गए हैं। हमारा कार्य घरों से चुराए जा सकने वाले अधिकतम संभावित मूल्य ज्ञात करना है।

समस्या विवरण - हमारे पास एक सरणी houses[] है जिसमें प्रत्येक घर में मौजूद मूल्य होते हैं। एक चोर घरों को लूटता है लेकिन वह दो आसन्न घरों से नहीं चुरा सकता क्योंकि पड़ोसियों को चोरी के बारे में पता चल जाता है। हमें चोर द्वारा बिना पकड़े घरों से चुराए जा सकने वाले अधिकतम संभावित मूल्य ज्ञात करना है।

आइए एक उदाहरण से समझते हैं:

इनपुट

houses[] = {5, 2, 1, 6, 7, 9, 4, 3}

आउटपुट

23

व्याख्या

अधिकतम मूल्य इस प्रकार चुराए जा सकते हैं: 5, 6, 9, 3।

समाधान दृष्टिकोण

समस्या का समाधान डायनामिक प्रोग्रामिंग का उपयोग करके पाया जा सकता है। चूंकि हमें चोर द्वारा चुराए जा सकने वाले अधिकतम मूल्य को खोजने की आवश्यकता है जैसे कि यदि वह इंडेक्स i पर घर से चुराता है, तो वह इंडेक्स (i+1) पर घर से नहीं चुरा सकता। साथ ही, हमने इंडेक्स (i-1) पर घर से चोरी नहीं की होगी। समस्या को हल करने के लिए, हम आकार n की एक DP सरणी बनाएंगे। और आधार मामले के लिए हम DP[0] को houses[0] से और DP[1] को houses[1] से प्रारंभ करेंगे। फिर, हम इंडेक्स 2 से n-1 तक DP के सभी मान खोजेंगे। DP[i] का मान DP[i-2] + houses[i] या DP[i-1] में से अधिकतम होगा। और अंत में DP सरणी का अंतिम मान चुराया जा सकने वाला अधिकतम मूल्य है।

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम (DP सरणी दृष्टिकोण):

उदाहरण

#include <iostream> using namespace std; int calMax(int a, int b){    if(a > b)       return a;       return b; } int findMaxValuesStolen(int houses[], int n) {    if (n == 0)       return 0;    int DP[n];    DP[0] = houses[0];    DP[1] = calMax(houses[0], houses[1]);    for (int i = 2; i<n; i++)       DP[i] = calMax( (houses[i] + DP[i-2]), DP[i-1]);    return DP[n-1]; } int main() {    int houses[] = {5, 2, 1, 6, 7, 9, 4, 3};    int n = sizeof(houses)/sizeof(houses[0]);    cout<<"The maximum possible values stolen from the houses is    "<<findMaxValuesStolen(houses, n);    return 0; }

आउटपुट

The maximum possible values stolen from the houses is 23

यह समाधान अच्छा है लेकिन इसे इस तथ्य का उपयोग करके अधिक कुशल बनाया जा सकता है कि चुराया गया अधिकतम मूल्य केवल दो मानों का उपयोग करके पाया जा सकता है। चूंकि DP में, हमने प्रत्येक इंडेक्स के लिए केवल दो मानों का उपयोग किया है। इसलिए, हम समाधान खोजने के लिए केवल दो चरों का उपयोग कर सकते हैं जो समस्या की स्पेस जटिलता को कम करता है।

हमारे समाधान के कार्य को दर्शाने वाला प्रोग्राम (अनुकूलित स्पेस दृष्टिकोण):

उदाहरण

#include <iostream> using namespace std; int calMax(int a, int b){    if(a > b)       return a;       return b; } int findMaxValuesStolen(int houses[], int n) {    if (n == 0)       return 0;    int maxValStolen;    int val1 = houses[0];    int val2 = calMax(houses[0], houses[1]);    for (int i = 2; i<n; i++) {       maxValStolen = calMax( (houses[i]+val1) , val2);       val1 = val2;       val2 = maxValStolen;    }    return maxValStolen; } int main() {    int houses[] = {5, 2, 1, 6, 7, 9, 4, 3};    int n = sizeof(houses)/sizeof(houses[0]);    cout<<"The maximum possible values stolen from the houses is "<<findMaxValuesStolen(houses, n);    return 0; }

आउटपुट

The maximum possible values stolen from the houses is 23

  1. - C++ में n! % (k^x) = 0 के लिए x का अधिकतम मान ज्ञात करें

    मान लीजिए हमारे पास दो पूर्णांक n और k हैं। हमें x का अधिकतम मान ढूंढना है, जैसे कि n! mod (k^x) = 0। इसलिए जब n = 5, और k = 2, तो आउटपुट 3 होगा। जैसे n! = 120, अब x के विभिन्न मानों के लिए: 120 mod 2^0 = 0, 120 mod 2^1 = 0, 120 mod 2^2 = 0, 120 mod 2^3 = 0, 120 mod 2^4 = 8, 120 mod 2^5 = 24, 120 mo

  1. - C++ प्रोग्राम: क्रमबद्ध सरणी में दिए गए मान के k निकटतम तत्व ज्ञात करना

    मान लें हमारे पास कुछ तत्वों के साथ एक सरणी A है। हमारे पास दो अन्य मान X और k हैं। हमारा कार्य सरणी A से X के k निकटतम तत्वों की संख्या ज्ञात करना है। यदि तत्व X सरणी में मौजूद है, तो यह आउटपुट में नहीं दिखाया जाएगा। यदि A = [12, 16, 22, 30, 35, 39, 42, 45, 48, 50, 53, 55, 56] और X = 35, k = 4 है।

  1. - C++ प्रोग्राम: सरणी में सबसे छोटे मान की आवृत्ति ज्ञात करना

    यहां हम देखेंगे कि सरणी में सबसे छोटे तत्व की आवृत्ति कैसे ज्ञात करें। मान लें सरणी तत्व [5, 3, 6, 9, 3, 7, 5, 8, 3, 12, 3, 10] हैं, यहां सबसे छोटा तत्व 3 है, और इस तत्व की आवृत्ति 4 है। इसलिए आउटपुट 4 है। इसे हल करने के लिए हम सूची का सबसे छोटा तत्व ज्ञात करेंगे, फिर पहले नंबर की घटनाओं को गिनेंगे