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

C++ . में आकार k के अनुगमन का अधिकतम उत्पाद

इस समस्या में, हमें पूर्णांकों की एक सरणी गिरफ्तारी [] और एक संख्या k दी जाती है। हमारा कार्य C++ में आकार k के बाद के अधिकतम उत्पाद को खोजने के लिए एक प्रोग्राम बनाना है।

समस्या का विवरण - यहां, हमें आकार k, 1<=k <=n के बाद के क्रम को खोजने की जरूरत है, जिसमें इसके तत्वों का अधिकतम गुणनफल है।

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

इनपुट

arr[] = {1, 5, 6, -2, 0, 4} , k = 3

आउटपुट

120

स्पष्टीकरण

आकार 3 के बाद जिसका उत्पाद अधिकतम है (5, 6, 4) है। उत्पाद 120 है।

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

इस समस्या को हल करने के लिए, हम पहले arr [] और फिर arr [] के तत्वों और k के मान के आधार पर सरणी को सॉर्ट करेंगे। निम्नलिखित मामलों में विधि बदल जाती है -

केस 1 (यदि k सम है) - उत्पाद में 0 को छोड़कर सभी अधिकतम k मान हो सकते हैं। यहाँ, हमें ऋणात्मक मान युग्मों पर भी विचार करने की आवश्यकता है। चूँकि उनका परिमाण भी अधिकतम का परिणाम दे सकता है।

केस 2 (यदि k विषम है) - यह थोड़ी जटिल स्थिति है और मान परिभाषित करते हैं कि परिणाम की गणना कैसे की जानी चाहिए। सरणी के अधिकतम तत्व के आधार पर इस मामले को और वर्गीकृत करने की आवश्यकता है।

केस 2.1 (यदि अधिकतम संख्या सकारात्मक है) - इसका मतलब है कि सरणी सकारात्मक और नकारात्मक संख्याओं का मिश्रण है। इस मामले में, हम अधिकतम k तत्व पाएंगे और नकारात्मक पक्ष से अधिकतम जोड़े भी खोजेंगे (यदि संभव हो तो यह परिणाम दे सकता है)।

केस 2.2 (यदि अधिकतम संख्या शून्य है) - इसका मतलब है कि सरणी में सभी नकारात्मक तत्व और शून्य हैं। इस मामले में, अधिकतम परिणाम 0 होगा, क्योंकि विषम संख्या में ऋणात्मक तत्वों को गुणा करने पर एक ऋणात्मक संख्या प्राप्त होगी, जिसका अर्थ है कि 0 अधिकतम गुणनफल है।

केस 2.3 (यदि अधिकतम संख्या नकारात्मक है) - इसका मतलब है कि सरणी में केवल ऋणात्मक संख्याएँ हैं। इस मामले में, न्यूनतम परिमाण वाले तत्वों को गुणा करके अधिकतम परिणाम प्रदान किया जाएगा यानी अधिकतम सरणी मदद करेगी।

इस तरह, हमें तत्वों के मूल्य के साथ-साथ k पर भी जांच रखने की आवश्यकता है। इष्टतम परिणाम के लिए। इसके लिए, हम यह जांचने के लिए अधिकतम और न्यूनतम दोनों पक्षों को सरणी में रखेंगे कि क्या परिणाम में नकारात्मक युग्मों को गुणा करके परिणाम प्राप्त किया जा सकता है।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int findMaxSubArrayProduct(int arr[], int n, int k) {
   sort(arr, arr + n);
   int maxProd = 1;
   int i = 0, j = 0;
   int maxprod, minprod;
   if (arr[n - 1] == 0 && (k % 2 == 1))
      return 0;
   if (arr[n - 1] <= 0 && (k % 2 == 1)) {
      for (i = n - 1; i >= n - k; i--)
         maxProd *= arr[i];
         return maxProd;
   }
   i = 0;
   j = n - 1;
   if (k % 2 == 1) {
      maxProd *= arr[j];
      j--;
      k--;
   }
   k = k/2;
   int it = 0;
   while(it < k){
      int minprod = arr[i] * arr[i + 1];
      int maxprod = arr[j] * arr[j - 1];
      if (minprod > maxprod) {
         maxProd *= minprod;
         i += 2;
      } else {
         maxProd *= maxprod;
         j -= 2;
      }
      it++;
   }
   return maxProd;
}
int main() {
   int arr[] = { 1, 5, 6, -2, 0, 4 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 3;
   cout<<"The maximum product of subsequence of size "<<k<<" is "<<findMaxSubArrayProduct(arr, n, k);
   return 0;
}

आउटपुट

The maximum product of subsequence of size 3 is 120

  1. C++ . में आकार k के अनुगमन का अधिकतम उत्पाद

    इस समस्या में, हमें पूर्णांकों की एक सरणी गिरफ्तारी [] और एक संख्या k दी जाती है। हमारा कार्य C++ में आकार k के बाद के अधिकतम उत्पाद को खोजने के लिए एक प्रोग्राम बनाना है। समस्या का विवरण - यहां, हमें आकार k, 1<=k <=n के बाद के क्रम को खोजने की जरूरत है, जिसमें इसके तत्वों का अधिकतम गुणनफल है। समस

  1. सी++ में तीन नंबरों का अधिकतम उत्पाद

    मान लीजिए कि हमारे पास एक पूर्णांक सरणी है; हमें तीन नंबर खोजने होंगे जिनका उत्पाद अधिकतम है और फिर अधिकतम उत्पाद लौटाएं। इसलिए, अगर इनपुट [1,1,2,3,3] जैसा है, तो आउटपुट 18 होगा, क्योंकि तीन तत्व [2,3,3] हैं। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - सरणी संख्याओं को क्रमबद्ध करें l :

  1. C++ में शब्द की लंबाई का अधिकतम उत्पाद

    मान लीजिए कि हमारे पास शब्द नामक एक स्ट्रिंग सरणी है, लंबाई (शब्द [i]) * लंबाई (शब्द [जे]) का अधिकतम मान ज्ञात करें जहां दो शब्द सामान्य अक्षरों को साझा नहीं करेंगे। हम मान सकते हैं कि प्रत्येक शब्द में केवल छोटे अक्षर होंगे। यदि ऐसे कोई दो शब्द मौजूद नहीं हैं, तो 0 लौटाएं। इसलिए यदि इनपुट [abcw, ba