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

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


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

  • दोनों सब-एरेज का योग समान होगा
  • सभी एलिमेंट्स जो 5 के गुणक हैं, एक ही समूह में होंगे
  • सभी एलिमेंट्स जो 3 के गुणक हैं लेकिन 5 के नहीं, एक ही समूह में होंगे
  • बाकी सभी एलिमेंट्स अन्य समूहों में होंगे।

मान लीजिए सरणी के एलिमेंट्स {1, 4, 3} हैं, तो इसे विभाजित किया जा सकता है, क्योंकि {1, 3} का योग {4} के योग के समान है, और समूह भी दी गई शर्त के लिए सही हैं।

एल्गोरिदम

isSplitArray(arr, n, start, left_sum, right_sum) −

शुरुआत    यदि start = n, तो true वापस करें जब left_sum = right_sum, अन्यथा false    यदि arr[start] 5 से विभाज्य है, तो arr[start] को left_sum में जोड़ें    अन्यथा यदि arr[start] 3 से विभाज्य है, तो arr[start] को right_sum में जोड़ें    अन्यथा       isSplitArray(arr, n, start + 1, left_sum + arr[start], right_sum) OR isSplitArray(arr, n, start + 1, left_sum, right_sum + arr[start]) वापस करें    isSplitArray(arr, n, start + 1, left_sum, right_sum) वापस करें समाप्त

उदाहरण

#include <iostream> using namespace std; bool isSplitArray(int* arr, int n, int start, int left_sum, int right_sum) {    if (start == n) //जब यह अंत तक पहुंच जाता है       return left_sum == right_sum;    if (arr[start] % 5 == 0) //जब एलिमेंट 5 से विभाज्य है, left sum में जोड़ें       left_sum += arr[start];    else if (arr[start] % 3 == 0) //जब एलिमेंट 3 से विभाज्य है लेकिन 5 से नहीं, right sum में जोड़ें          right_sum += arr[start];    अन्यथा // अन्यथा इसे किसी भी सब-एरे में जोड़ा जा सकता है          return isSplitArray(arr, n, start + 1, left_sum + arr[start], right_sum) || isSplitArray(arr, n, start + 1, left_sum, right_sum + arr[start]);    // उन मामलों के लिए जब एलिमेंट 3 या 5 का गुणक है।    return isSplitArray(arr, n, start + 1, left_sum, right_sum); } int main() {    int arr[] = {1, 4, 3};    int n = sizeof(arr)/sizeof(arr[0]);    if(isSplitArray(arr, n, 0, 0, 0)){       cout <<"विभाजित किया जा सकता है";    } else {       cout <<"विभाजित नहीं किया जा सकता";    } }

आउटपुट

विभाजित किया जा सकता है

  1. - C++ प्रोग्राम दी गई संख्या के अंकों का योग करने के लिए

    C++ भाषा में अंकों का योग गणना करने का एक उदाहरण निम्नलिखिक है, उदाहरण #include<iostream> using namespace std; int main() {    int x, s = 0;    cout << "संख्या दर्ज करें: ";    cin >> x;    while (x != 0) {       s =

  1. - जावा में दिए गए क्वेरी के आधार पर सरणी को उपसरणी में विभाजित करने के बाद अधिकतम उपसरणी योग

    हमें दो पूर्णांक सरणी दी गई हैं, एक में वे तत्व हैं जिनकी गणना की जानी है और दूसरे में वे विभाजन बिंदु हैं जिनकी आवश्यकता सरणी को उपसमुच्चय बनाने के लिए विभाजित करने के लिए होती है और हमें प्रत्येक विभाजन में प्रत्येक उपसमुच्चय का योग निकालना है और अधिकतम उपसमुच्चय योग वापस करना है।आइए उदाहरण से समझ

  1. - पायथन में ऐरे को तीन बराबर सम भागों में विभाजित करना

    मान लीजिए हमारे पास इंटीजर्स का एक ऐरे A है, हमारा आउटपुट true होगा यदि और केवल यदि हम ऐरे को तीन नॉन-खाली भागों में विभाजित कर सकते हैं जिनका योग बराबर हो। औपचारिक रूप से, हम ऐरे को विभाजित कर सकते हैं यदि हम इंडेक्स i+1 < j ढूंढ सकते हैं जैसे कि (A[0] + A[1] + ... + A[i], A[i+1] + A[i+2] + ... +