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

C++ में ऐरे को समान रूप से विभाजित करने के लिए आवश्यक न्यूनतम धनात्मक पूर्णांक


समस्या विवरण

N धनात्मक इंटीजर्स का एक ऐरे दिया गया है, कार्य उस सबसे छोटे धनात्मक पूर्णांक को ढूंढना है जिसे ऐरे के किन्हीं दो एलिमेंट्स के बीच रखा जा सके जैसे कि, उसके पहले आने वाले सबऐरे के एलिमेंट्स का योग, उसके बाद आने वाले सबऐरे के एलिमेंट्स के योग के बराबर हो, नए रखे गए पूर्णांक को दोनों में से किसी एक सबऐरे में शामिल करके।

उदाहरण

यदि arr = {3, 2, 1, 5, 7, 10} तो आउटपुट 6 है। यदि हम मान 6 को 5 और 7 के बीच रखते हैं तो बाएं और दाएं सबऐरे का योग निम्नानुसार बराबर हो जाता है:

3 + 2 + 1 + 5 + 6 = 17

7 + 10 = 17

एल्गोरिदम

  • पूरे ऐरे का योग S हो
  • विचार इंडेक्स i तक (इसे शामिल करते हुए) लेफ्ट योग ढूंढना है। मान लें यह योग L है
  • अब सबऐरे arr[i+1]..N का योग S - L है। मान लें यह योग R है
  • चूंकि दोनों सबऐरे का योग बराबर होना चाहिए, ऊपर प्राप्त दो योगों L और R में से बड़े को, इन दोनों में से छोटे योग के मान तक कम किया जाना चाहिए और बड़े योग और छोटे योग के बीच का अंतर, आवश्यक धनात्मक पूर्णांक का मान होगा।

उदाहरण

#include <iostream> 
#include <numeric> 
#include <climits> 
using namespace std; 

int getMinimumSplitPoint(int *arr, int n) { 
    int sum = 0; 
    sum = accumulate(arr, arr + n, sum); 
    int leftSum = 0; 
    int rightSum = 0; 
    int minValue = INT_MAX; 
    for (int i = 0; i < n - 1; ++i) { 
        leftSum += arr[i]; 
        rightSum = sum - leftSum; 
        if (leftSum > rightSum) { 
            int e = leftSum - rightSum; 
            if (e < minValue) { 
                minValue = e; 
            } 
        } else { 
            int e = rightSum - leftSum; 
            if (e < minValue) { 
                minValue = e; 
            } 
        } 
    } 
    return minValue; 
} 

int main() { 
    int arr[] = {3, 2, 1, 5, 7, 10}; 
    int n = sizeof(arr) / sizeof(arr[0]); 
    int minValue = getMinimumSplitPoint(arr, n); 
    cout << "Element " << minValue << " needs to be inserted\n"; 
    return 0; 
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को कंपाइल और एक्जीक्यूट करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है:

Element 6 needs to be inserted

  1. - C++ में दी गई शर्तों के अनुसार सरणी को समान योग भागों में विभाजित करें

    यहां हम एक समस्या देखेंगे। मान लीजिए एक सरणी arr दी गई है। हमें जांचना है कि क्या सरणी को दो भागों में विभाजित किया जा सकता है, जैसे कि: दोनों सब-एरेज का योग समान होगा सभी एलिमेंट्स जो 5 के गुणक हैं, एक ही समूह में होंगे सभी एलिमेंट्स जो 3 के गुणक हैं लेकिन 5 के नहीं, एक ही समूह में होंगे बाकी सभी

  1. - C++ में निरपेक्ष अंतर के न्यूनतम योग वाला एरे तत्व

    यह प्रोग्राम दिए गए एरे के न्यूनतम निरपेक्ष अंतर को खोजने के लिए है जहां हमारे पास एक एरे है जिसमें विशिष्ट तत्व हैं। इस अवधारणा को बेहतर ढंग से सीखने के लिए, आइए आवश्यक चीजों को दोहराएं: एरे (Array) समान डेटा प्रकार के तत्वों का एक कंटेनर है। एरे की लंबाई पूर्वनिर्धारित होनी चाहिए। निरपेक्ष अंतर (

  1. - C++ में ऐरे में न्यूनतम संख्या जोड़कर योग को सम बनाना

    मान लीजिए एक ऐरे है जिसमें कुछ संख्याएं हैं। हमें बताना है कि न्यूनतम कितनी संख्याएं जोड़ने से तत्वों का योग सम हो जाएगा। संख्या 0 से बड़ी होनी चाहिए। इसलिए यदि तत्वों का योग विषम है, तो हम 1 जोड़ेंगे, लेकिन यदि योग पहले से सम है, तो हम 2 जोड़कर इसे सम बनाएंगे। एल्गोरिदम addMinNumber(arr) begin