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

सी ++ प्रोग्राम में बार-बार संयोजन के बाद बनाए गए सरणी में अधिकतम सबरेरे योग

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

समस्या का विवरण - हम पाएंगे कि उप-सरणी का अधिकतम योग उस सरणी से लिया गया है जो एआर, k बार दोहराने के बाद बनाई गई है।

उदाहरण

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

इनपुट

arr[] = {−9, −5, 14, 6} k = 2

आउटपुट

26

स्पष्टीकरण

New array after repeating : {−9, −5, 14, 6, −9, −5, 14, 6}
Subarray with maximum sum = {14, 6, −9, −5, 14, 6}
Sum = 26

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

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

उदाहरण

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

#include <iostream>
using namespace std;
int calcMaxSubArraySum(int arr[], int n, int k){
   int newArr[2*n];
   for(int i = 0; i < k*n; i++)
   newArr[i] = arr[i%n];
   int maxSum = −1000, sum = 0;
   for (int i = 0; i < k*n; i++) {
      sum = sum + newArr[i];
      if (maxSum < sum)
         maxSum = sum;
      if (sum < 0)
         sum = 0;
   }
   return maxSum;
}
int main(){
   int arr[] = { −9, −5, 14, 6 };
   int k = 2;
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum subarray sum in an array created after repeated concatenation is "<<calcMaxSubArraySum(arr, n, k);
   return 0;
}

आउटपुट

The maximum subarray sum in an array created after repeated
concatenation is 26

यह दृष्टिकोण अच्छा है लेकिन मॉड्यूलर अंकगणित का उपयोग करके समस्या को हल करने के लिए एक अधिक कुशल दृष्टिकोण संभव है।

मॉड्यूलर अंकगणित तब होता है जब हम शेष समीकरण प्राप्त करने के लिए मॉड्यूल ऑपरेटर का उपयोग करते हैं।

समस्या को हल करने के लिए, हम बार-बार संयोजन द्वारा सरणी बनाने के बजाय मॉड्यूलर अंकगणित का उपयोग करेंगे। बाकी समाधान वही रहता है।

उदाहरण

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

#include <iostream>
using namespace std;
int calcMaxSubArraySum(int arr[], int n, int k){
   int maxSum = −1000, sum = 0;
   for (int i = 0; i < k*n; i++) {
      sum = sum + arr[i%n];
      if (maxSum < sum)
         maxSum = sum;
      if (sum < 0)
         sum = 0;
   }
   return maxSum;
}
int main(){
   int arr[] = { −9, −5, 14, 6 };
   int k = 2;
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum subarray sum in an array created after
   repeated concatenation is "<<calcMaxSubArraySum(arr, n, k);
   return 0;
}

आउटपुट

The maximum subarray sum in an array created after repeated
concatenation is 26

  1. सी ++ में एक सरणी में अधिकतम संतुलन योग

    समस्या कथन एक सरणी को देखते हुए []। उपसर्ग योग का अधिकतम मान ज्ञात करें जो कि गिरफ्तारी में अनुक्रमणिका i के लिए प्रत्यय योग भी है []। उदाहरण यदि इनपुट ऐरे है - Arr[] ={1, 2, 3, 5, 3, 2, 1} तो आउटपुट 11 है - उपसर्ग योग =गिरफ्तारी[0..3] =1 + 2 + 3 + 5 =11 और प्रत्यय योग =गिरफ्तारी[3..6] =5 + 3 +

  1. C++ में किसी सरणी का अधिकतम औसत योग विभाजन

    समस्या कथन एक सरणी को देखते हुए, हम संख्या A की एक पंक्ति को अधिकतम K आसन्न (गैर-रिक्त) समूहों में विभाजित करते हैं, फिर स्कोर प्रत्येक समूह के औसत का योग होता है। अधिकतम स्कोर क्या हो सकता है? उदाहरण यदि इनपुट सरणी {9, 2, 5, 3, 10} है तो हम सरणी को इस प्रकार विभाजित कर सकते हैं - {9} {2, 5, 3} औ

  1. सी ++ में बार-बार घटाव के साथ सभी तत्वों को समान बनाने के बाद अधिकतम सरणी योग पाएं

    मान लीजिए कि हमारे पास n तत्वों की एक सरणी है। सभी तत्वों का अधिकतम संभव योग इस प्रकार ज्ञात कीजिए कि सभी तत्व समान हों। केवल संचालन जिसकी अनुमति है वह है किन्हीं दो तत्वों को चुनना और उनमें से बड़े को दो के पूर्ण अंतर से बदलना। मान लीजिए कि तत्व [9, 12, 3, 6] जैसे हैं। फिर आउटपुट 12 होगा। तो पहले ए