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

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

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

उपसर्ग सरणी −

. के रूप में उत्पन्न होती है

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

उपसर्ग का दूसरा तत्वअरे [1] =उपसर्गअरे [0] + गिरफ्तारी [1]

उपसर्ग का तीसरा तत्वअरे [2] =उपसर्गअरे [1] + गिरफ्तारी [2]

उपसर्ग का चौथा तत्वअरे[3] =उपसर्गअरे[2] + गिरफ्तारी[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+`0 =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+8+5 =19 के रूप में अधिकतम करना है जो कि अंतिम आउटपुट है।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है -

  • एक पूर्णांक सरणी और एक अस्थायी चर को x से -1 के रूप में घोषित करें, फिर arr [0] को arr [0] * x पर सेट करें।

  • एक सरणी के आकार की गणना करें। एक उपसर्ग सरणी को prefix_arry [आकार] के रूप में घोषित करें। दिए गए सरणी से उपसर्ग सरणी उत्पन्न करने के लिए create_prefix_arr(arr, size, prefix_array) फ़ंक्शन को कॉल करें। उपसर्ग सरणी प्रिंट करें

  • फ़ंक्शन को कॉल करें max_sum(prefix_array, size) जो सरणी के अधिकतम योग को संग्रहीत करेगा।

  • समारोह के अंदर शून्य create_prefix_arr(int arr[], int size, int prefix_array[])

    • प्रीफ़िक्स_एरे[0] को गिरफ्तारी [0] पर सेट करें।

    • एक सरणी के आकार तक i से 0 तक के लिए लूप प्रारंभ करें। लूप के अंदर, prefix_array[i] से prefix_array[i-1] + arr[i] सेट करें।

  • फ़ंक्शन के अंदर int max_sum(int prefix_array[], int size)

    • अस्थायी चर को अस्थायी घोषित करें और इसे -1 पर सेट करें।

    • एक सरणी के आकार तक i से 0 तक के लिए लूप प्रारंभ करें। लूप के अंदर, temp को max(temp, prefix_array[i])

      . के रूप में सेट करें
    • किसी सरणी को arr[temp +1] के रूप में घोषित करें और किसी सरणी के सभी तत्वों को 0 से प्रारंभ करें।

    • एक सरणी के आकार तक i से 0 तक के लिए लूप प्रारंभ करें। लूप के अंदर, arr[prefix_array[i]]++

      . सेट करें
    • एक अस्थायी चर को max_sum के रूप में घोषित करें और इसे 0 पर सेट करें। एक चर को int i to temp के रूप में घोषित करें

    • लूप प्रारंभ करें जबकि i>0. IF arr[i]> 0 चेक करें और फिर max_sum को max_sum + i पर सेट करें और arr[i-1]-- को घटाएं और arr[i]-- को घटाएं। ELSE, i को 1 से घटाएं।

    • max_sum लौटाएं।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
#define Max_size 5
//create the prefix array
void create_prefix_arr(int arr[], int size, int prefix_array[]) {
   prefix_array[0] = arr[0];
   for(int i=0; i<size; i++)  {
      prefix_array[i] = prefix_array[i-1] + arr[i];
   }
}
//find the maximum sum of prefix array
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];

   //call function to create a prefix array
   create_prefix_arr(arr, size, prefix_array);
   //print the prefix array
   cout<<"Prefix array is: ";
   for(int i = 0; i < size; i++) {
      cout << prefix_array[i] << " ";
   }
   //print the maximum sum of prefix array
   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++ में बिटवाइज़ या किसी ऐरे को अधिकतम करें

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

  1. C++ में K निषेध के बाद सरणी योग को अधिकतम करें

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

  1. सी ++ में एक सम ऐरे पहेली?

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