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

C++ में अनुमत दिए गए सरणी पर केवल घुमावों के साथ Sum(i*arr[i]) का अधिकतम मान ज्ञात करें


इस समस्या में, हमें n तत्वों से युक्त एक array arr[] दिया जाता है। हमें किसी दिए गए सरणी पर केवल घुमावों के साथ Sum(i*arr[i]) का अधिकतम मान ज्ञात करने की आवश्यकता है। (i*arr[i]) का अधिकतम योग ज्ञात करने के लिए, हम कितने भी चक्कर लगा सकते हैं।

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

इनपुट

arr[] = {4, 1, 3, 7, 2}

आउटपुट

43

स्पष्टीकरण

हम अधिकतम मान प्राप्त करने के लिए सरणी को एक बार घुमाएंगे, रोटेशन के बाद सरणी {2, 4, 1, 3, 7}

होगी

योग =0*2 + 1*4 + 2*1 + 3*3 + 4*7 =0 + 4 + 2 + 9 + 28 =43

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

समस्या का एक सरल समाधान सरणी को n बार घुमाना है। प्रत्येक घुमाव के बाद, हम योग (i*arr[i]) पाएंगे और सभी मानों का अधिकतम मान लौटाएंगे। यह बहुत अच्छा है लेकिन समय जटिलता ओ (एन 2) के क्रम की है। समस्या का एक अधिक कुशल समाधान है योग (i*arr[i]) का मान सूत्र का उपयोग करके बिना घुमाए निकालना।

आइए गणितीय रूप से सूत्र प्राप्त करें,

Let the sum after k rotation is equal to sum(k).
sum(0) = 0*arr[0] + 1*arr[1] +...+ (n-1)*arr[n-1] => eq 1

अब, हम उन मानों को घुमाएंगे जिनके बाद योग बन जाएगा,

sum(1) = 0*arr[n-1] + 1*arr[0] +...+ (n-1)*arr[n-2] => eq 2 Subtracting eq2 - eq 1
sum(1) - sum(0) = 0*arr[n-1] + 1*arr[0] +...+ (n-1)*arr[n-2] - 0*arr[0] + 1*arr[1] +...+ (n-1)*arr[n-1]
sum(1) - sum(0) = arr[0] + arr[1] + … arr[n-2 ] - (n - 1)*arr[n-1]

इसी तरह योग के लिए (2) - योग (1),

sum(2) - sum(1) = arr[0] + arr[1] + …. arr[n - 3] - (n - 1)*arr[n-2] + arr[n-1]

समीकरण को सामान्य बनाना,

sum(k) - sum(k-1) = arr[0] + arr[1] + …. Arr[n - 1] - (n)*arr[n - k]

इसका उपयोग करके हम sum(0),

. का उपयोग करके sum(k) का मान ज्ञात कर सकते हैं

अब, समाधान में हम सरणी के सभी मानों का योग पाएंगे, फिर योग (0) का मान ज्ञात करेंगे। लूप का उपयोग करते हुए, हम 1 से n तक योग (k) के सभी मान प्राप्त करेंगे। और उनमें से अधिकतम लौटाएं।

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

उदाहरण

#include <iostream>
using namespace std;
int findMaxSumRotation(int arr[], int n){
   int arrSum = 0;
   int currSum = 0;
   for (int i=0; i<n; i++){
      arrSum = arrSum + arr[i];
      currSum = currSum+(i*arr[i]);
   }
   int maxSum = currSum;
   for (int j=1; j<n; j++){
      currSum = currSum + arrSum-n*arr[n-j];
      if (currSum > maxSum)
         maxSum = currSum;
   }
   return maxSum;
}
int main(){
   int arr[] = {4, 1, 3, 7, 2};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"The maximum value of sum(i*arr[i]) using rotations is "<<findMaxSumRotation(arr, n);
   return 0;
}

आउटपुट

The maximum value of sum(i*arr[i]) using rotations is 43

  1. C++ में दिए गए योग के साथ अधिकतम आकार का उपसमुच्चय

    समस्या कथन एन तत्वों और योग की एक सरणी को देखते हुए। हमें अधिकतम आकार के सबसेट का आकार खोजने की जरूरत है जिसका योग दिए गए योग के बराबर है उदाहरण यदि इनपुट सरणी arr ={ 2, 3, 5, 10} और योग =20 है तो आउटपुट 4 के रूप में होगा - 2 + 3 + 5 + 10 =20 जो दिए गए योग के बराबर है एल्गोरिदम हम इस समस्या को ह

  1. सी ++ में दिए गए ऑपरेशन के साथ सरणी योग को अधिकतम करना

    विवरण (2 * n - 1) पूर्णांकों की एक सरणी है। हम सरणी में बिल्कुल n तत्वों का चिह्न बदल सकते हैं। दूसरे शब्दों में, हम बिल्कुल n सरणी तत्वों का चयन कर सकते हैं, और उनमें से प्रत्येक को -1 से गुणा कर सकते हैं। सरणी का अधिकतम योग ज्ञात करें। उदाहरण यदि इनपुट ऐरे {-2, 100, -3} है तो हम -2 और -3 के अधिक

  1. सी++ में एक सरणी में अधिकतम जीसीडी के साथ जोड़ी खोजें

    मान लीजिए कि हमारे पास सकारात्मक पूर्णांकों की एक सरणी है। हमारा काम सरणी से पूर्णांकों की जोड़ी को खोजना है, जहां GCD मान अधिकतम है। मान लीजिए A ={1, 2, 3, 4, 5}, तो आउटपुट 2 है। जोड़ी (2, 4) में GCD 2 है, अन्य GCD मान 2 से कम हैं। इस समस्या को हल करने के लिए, हम प्रत्येक तत्व के भाजक की गिनती को