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

C++ में दी गई सरणी के सभी घुमावों में i * arr[i] का अधिकतम योग (Maximum sum of i * arr[i] among all rotations)


इस समस्या में, हमें एक सरणी arr दी गई है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में दी गई सरणी के सभी घुमावों (rotations) में i*arr[i] का अधिकतम योग ढूंढे।

प्रोग्राम विवरण - यहां, हम सभी घुमावों के योगों में से तत्वों को उनके सूचकांक {i * arr[i]} से गुणा करके अधिकतम योग ढूंढेंगे।

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

इनपुट - सरणी arr = {4, 8, 1, 5}

आउटपुट - 37

व्याख्या -

सभी घुमाव i*arr[i] के योग के साथ:
{4, 8, 1, 5} = 4*0 + 8*1 + 1*2 + 5*3 = 25
{8, 1, 5, 4} = 8*0 + 1*1 + 5*2 + 4*3 = 23
{1, 5, 4, 8} = 1*0 + 5*1 + 4*2 + 8*3 = 37
{5, 4, 8, 1} = 5*0 + 4*1 + 8*2 + 1*3 = 23
तीसरे घुमाव के लिए i*arr[i] का अधिकतम योग है।

इस समस्या का एक सरल समाधान प्रत्येक घुमाव के सभी तत्वों को उनके सूचकांक से गुणा करके योग की गणना करना है। और फिर सभी घुमावों के योगों का अधिकतम ढूंढना। इसके लिए, हम सरणी को n बार घुमाएंगे और प्रत्येक के लिए योग की गणना करेंगे और यदि वर्तमान घुमाव का योग अंतिम से अधिक है तो maxSum वेरिएबल में संग्रहीत करेंगे।

उदाहरण

#include<iostream>
using namespace std;

int findMax(int a, int b){
    if(a > b) return a; return b;
}

int calculateMaxSum(int arr[], int n){
    int maxSum = 0, sum = 0;
    for (int i = 0; i < n; i++){
        sum = 0;
        for (int j = 0; j < n; j++){
            int index = (i + j) % n;
            sum += j * arr[index];
        }
        maxSum = findMax(maxSum, sum);
    }
    return maxSum;
}

int main(){
    int arr[] = {4, 8, 1, 5};
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << "सरणी के सभी घुमावों का अधिकतम योग है " << calculateMaxSum(arr, n);
    return 0;
}

आउटपुट

सरणी के सभी घुमावों का अधिकतम योग है 37

एक कुशल समाधान पिछले घुमाव का उपयोग करके अगले घुमाव के योग की गणना करना है। हम सूत्र का उपयोग करेंगे:

nextSum = currentSum - (arraySum - arr[i-1]) + arr[i-1]*(n-1)

इस सूत्र का उपयोग करके, हम nextSum ढूंढेंगे और लूप बॉडी के अंत में, हम जांचेंगे कि क्या nextSum, maxSum से अधिक है, यदि हां तो maxSum = nextSum।

उदाहरण

#include<iostream>
using namespace std;

int findMax(int a, int b){
    if(a > b) return a;
    return b;
}

int calculateMaxSum(int arr[], int n){
    int arraySum = 0, currentSum = 0, nextSum;
    for (int i = 0; i < n; i++){
        arraySum += arr[i];
        currentSum += i * arr[i];
    }
    int maxSum = currentSum;
    for (int i = 1; i < n; i++){
        nextSum = currentSum - (arraySum - arr[i-1]) + arr[i-1] * (n-1);
        currentSum = nextSum;
        maxSum = findMax(maxSum, nextSum);
    }
    return maxSum;
}

int main(){
    int arr[] = {4, 8, 1, 5};
    int n = sizeof(arr)/sizeof(arr[0]);
    cout << "सरणी के सभी घुमावों का अधिकतम योग है " << calculateMaxSum(arr, n);
    return 0;
}

आउटपुट

सरणी के सभी घुमावों का अधिकतम योग है 37
  1. C++ में दिए गए बाइनरी ट्री के सभी स्तरों पर गैर-पत्ती नोड्स का अधिकतम योग (Maximum sum of non-leaf nodes among all levels) C++ में दिए गए बाइनरी ट्री के सभी स्तरों पर गैर-पत्ती नोड्स का अधिकतम योग (Maximum sum of non-leaf nodes among all levels)

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में दिए गए बाइनरी ट्री के सभी स्तरों पर गैर-पत्ती नोड्स (non-leaf nodes) का अधिकतम योग ढूंढे। समस्या विवरण - हम ट्री के हर स्तर पर सभी गैर-पत्ती नोड्स का योग निकालेंगे और फिर अधिकतम योग प्रिंट करेंगे। आइए एक उद

  1. - C++ में ऐरे में अधिकतम संतुलन योग

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

  1. - C++ में सम ऐरे पजल (बिना घटाव ऑपरेटर के)

    यहां हम ऐरे से संबंधित एक रोचक समस्या देखेंगे। n तत्वों वाला एक ऐरे है। हमें n तत्वों का एक और ऐरे बनाना है। लेकिन दूसरे ऐरे का i-th स्थान पहले ऐरे के i-th तत्व को छोड़कर सभी तत्वों का योग रखेगा। और एक प्रतिबंध है कि हम इस समस्या में घटाव ऑपरेटर का उपयोग नहीं कर सकते। यदि हम घटाव ऑपरेशन का उपयोग कर