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

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

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

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

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

एल्गोरिदम

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

Begin
   if start = n, then return true when left_sum = right_sum, otherwise false
   if arr[start] is divisible by 5, then add arr[start] with the left_sum
   else if arr[start] is divisible by 3, then add arr[start] with the right_sum
   else
      return 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)
End

उदाहरण

#include <iostream>
using namespace std;
bool isSplitArray(int* arr, int n, int start, int left_sum, int right_sum) {
   if (start == n) //when it reaches at the end
      return left_sum == right_sum;
   if (arr[start] % 5 == 0) //when the element is divisible by 5, add to left sum
      left_sum += arr[start];
   else if (arr[start] % 3 == 0) //when the element is divisible by 3 but not 5, add to right sum
         right_sum += arr[start];
   else // otherwise it can be added to any of the sub-arrays
         return isSplitArray(arr, n, start + 1, left_sum + arr[start], right_sum) || isSplitArray(arr, n, start + 1, left_sum, right_sum + arr[start]);
   // For cases when element is multiple of 3 or 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 <<"Can be split";
   } else {
      cout <<"Can not be split";
   }
}

आउटपुट

Can be split

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

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

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

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

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

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी A है, तो हमारा आउटपुट सही होगा यदि और केवल तभी हम सरणी को तीन गैर-रिक्त भागों में विभाजित कर सकते हैं, जिनका योग बराबर है। औपचारिक रूप से, हम सरणी को विभाजित कर सकते हैं यदि हम इंडेक्स i+1