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

C++ में सरणी के उपसर्ग को -1 से गुणा करके सरणी के योग को अधिकतम करें

हमें एक पूर्णांक सरणी दी गई है और कार्य पहले सरणी का उपसर्ग प्राप्त करना है और फिर इसे -1 से गुणा करना है, दूसरा सरणी का उपसर्ग योग गणना करना है और अंत में उत्पन्न उपसर्ग सरणी से अधिकतम योग ढूंढना है।

उपसर्ग सरणी इस प्रकार उत्पन्न होती है:

उपसर्गसरणी[0] का पहला तत्व = सरणी का पहला तत्व

उपसर्गसरणी[1] का दूसरा तत्व = उपसर्गसरणी[0] + arr[1]

उपसर्गसरणी[2] का तीसरा तत्व = उपसर्गसरणी[1] + arr[2]

उपसर्गसरणी[3] का चौथा तत्व = उपसर्गसरणी[2] + arr[3] ... आदि।

विभिन्न इनपुट-आउटपुट परिदृश्य देखते हैं:

इनपुट: int arr[] = {2, 4, 1, 5, 2}

आउटपुट: उपसर्ग सरणी है: -2 2 3 8 10 सरणी के उपसर्ग को -1 से गुणा करके सरणी के योग को अधिकतम करें: 21

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

इनपुट: int arr[] = {-1, 4, 2, 1, -9, 6};

आउटपुट: उपसर्ग सरणी है: 1 5 7 8 -1 5 सरणी के उपसर्ग को -1 से गुणा करके सरणी के योग को अधिकतम करें: 19

व्याख्या: हमें एक पूर्णांक सरणी दी गई है। तो हम पहले सरणी का उपसर्ग लेंगे जो -1 है और इसे -1 से गुणा करेंगे। तो, नई सरणी {1, 4, 2, 1, -9, 6} होगी। अब, हम उपसर्ग सरणी बनाएंगे जो {1, 5, 7, 8, -1, 5} है। अंतिम चरण योग को अधिकतम करना है: 1+5+7+8+5 = 19 जो अंतिम आउटपुट है।

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण:

  • एक पूर्णांक सरणी घोषित करें और एक अस्थायी वेरिएबल x को -1 पर सेट करें फिर arr[0] को arr[0] * x पर सेट करें।
  • सरणी का आकार गणना करें। prefix_arry[size] के रूप में एक उपसर्ग सरणी घोषित करें। फंक्शन create_prefix_arr(arr, size, prefix_array) को उपसर्ग सरणी उत्पन्न करने के लिए कॉल करें। उपसर्ग सरणी प्रिंट करें।
  • फंक्शन maximize_sum(prefix_array, size) कॉल करें जो सरणी का अधिकतम योग संग्रहीत करेगा।
  • फंक्शन void create_prefix_arr(int arr[], int size, int prefix_array[]) के अंदर:
    • prefix_array[0] को arr[0] पर सेट करें।
    • i को 0 से सरणी के आकार तक लूप चलाएं। अंदर, prefix_array[i] को prefix_array[i-1] + arr[i] पर सेट करें।
  • फंक्शन int maximize_sum(int prefix_array[], int size) के अंदर:
    • temp नामक एक अस्थायी वेरिएबल घोषित करें और इसे -1 पर सेट करें।
    • i को 0 से सरणी के आकार तक लूप चलाएं। अंदर, temp को max(temp, prefix_array[i]) पर सेट करें।
    • arr[temp +1] के रूप में एक सरणी घोषित करें और सरणी के सभी तत्वों को 0 से इनिशियलाइज़ करें।
    • i को 0 से सरणी के आकार तक लूप चलाएं। अंदर, arr[prefix_array[i]]++ सेट करें।
    • max_sum नामक एक अस्थायी वेरिएबल घोषित करें और इसे 0 पर सेट करें। int i को temp पर घोषित करें।
    • WHILE i > 0 लूप शुरू करें। जांचें यदि arr[i] > 0 तो max_sum को max_sum + i पर सेट करें और arr[i-1]-- और arr[i]-- घटाएं। अन्यथा, i को 1 से घटाएं।
    • max_sum लौटाएं।

उदाहरण

#include <bits/stdc++.h>
using namespace std;

#define Max_size 5

// उपसर्ग सरणी बनाएं
void create_prefix_arr(int arr[], int size, int prefix_array[]) {
    prefix_array[0] = arr[0];
    for(int i = 1; i < size; i++) {
        prefix_array[i] = prefix_array[i-1] + arr[i];
    }
}

// उपसर्ग सरणी का अधिकतम योग ढूंढें
int maximize_sum(int prefix_array[], int size) {
    int temp = -1;
    for(int i = 0; i < size; i++) {
        temp = max(temp, prefix_array[i]);
    }
    int arr[temp + 1];
    memset(arr, 0, sizeof(arr));
    for(int i = 0; i < size; i++) {
        arr[prefix_array[i]]++;
    }
    int max_sum = 0;
    int i = temp;
    while(i > 0) {
        if(arr[i] > 0) {
            max_sum = max_sum + i;
            arr[i-1]--;
            arr[i]--;
        } else {
            i--;
        }
    }
    return max_sum;
}

int main() {
    int arr[] = {2, 4, 1, 5, 2};
    int x = -1;
    arr[0] = arr[0] * x;
    int size = sizeof(arr) / sizeof(arr[0]);
    int prefix_array[size];
    // उपसर्ग सरणी बनाने के लिए फंक्शन कॉल करें
    create_prefix_arr(arr, size, prefix_array);
    // उपसर्ग सरणी प्रिंट करें
    cout << "Prefix array is: ";
    for(int i = 0; i < size; i++) {
        cout << prefix_array[i] << " ";
    }
    // उपसर्ग सरणी का अधिकतम योग प्रिंट करें
    cout << "\nMaximize the sum of array by multiplying prefix of array with -1 are: " << maximize_sum(prefix_array, size);
    return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा:

Prefix array is: -2 2 3 8 10
Maximize the sum of array by multiplying prefix of array with -1 are: 21
  1. - C++ में ऐरे के बिटवाइज OR को अधिकतम करना

    समस्या कथन N पूर्णांकों का एक ऐरे दिया गया है। ऐरे के सभी तत्वों के बिटवाइज OR को एक कार्य करके अधिकतम करना है। कार्य ऐरे के किसी भी तत्व को अधिकतम k बार दिए गए पूर्णांक x से गुणा करना है। यदि इनपुट ऐरे है {4, 3, 6, 1}, k = 2 और x = 3 तो प्राप्त किया जा सकने वाला अधिकतम मान 55 है। एल्गोरिदम 1. एक

  1. - C++ में K नेगेशन के बाद ऐरे योग को अधिकतम करना

    समस्या कथन आकार n का एक ऐरे और एक संख्या k दी गई है। हमें ऐरे को k बार संशोधित करना है। ऐरे संशोधित करने का मतलब है प्रत्येक ऑपरेशन में हम किसी भी ऐरे तत्व arr[i] को उसके नकारात्मक से बदल सकते हैं यानी arr[i] = -arr[i]। कार्य इस ऑपरेशन को इस तरह करना है कि k ऑपरेशन के बाद ऐरे का योग अधिकतम हो। यद

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

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