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

N पूर्णांकों की एक सरणी में एक गैर-खाली उपसमुच्चय खोजें जैसे कि उपसमुच्चय के तत्वों का योग N से C++ में विभाज्य हो

मान लीजिए हमारे पास n संख्याओं की एक सरणी है; हमें एक गैर-रिक्त उपसमुच्चय को खोजना है जैसे कि उपसमुच्चय के तत्वों का योग n से विभाज्य हो। इसलिए, हमें ऐसे किसी भी उपसमुच्चय को उसके आकार और मूल सरणी में तत्वों के सूचकांक के साथ आउटपुट करना होगा जब वह मौजूद हो।

इसलिए, अगर इनपुट [3, 2, 7, 1, 9] जैसा है, तो आउटपुट [2], [1 2] होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक मानचित्र my_map परिभाषित करें
  • जोड़ें:=0
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • जोड़ें :=(+ arr[i] जोड़ें) mod N
  • यदि जोड़ 0 के समान है, तो −
    • i + 1 प्रिंट करें
    • इनिशियलाइज़ j :=0 के लिए, जब j <=i, अपडेट करें (j को 1 से बढ़ाएँ), −
        करें
      • प्रिंट जे + 1
    • वापसी
  • यदि my_map में जोड़ें, तो −
    • प्रिंट करें (i - my_map[add])
    • इनिशियलाइज़ j :=my_map[add] + 1 के लिए, जब j <=i, अपडेट (j को 1 से बढ़ाएँ), −
        करें
      • प्रिंट जे + 1
    • वापसी
  • अन्यथा
    • my_map[add] :=i

उदाहरण (C++)

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
void subset_find(int arr[], int N) {
   unordered_map<int, int> my_map;
   int add = 0;
   for (int i = 0; i < N; i++) {
      add = (add + arr[i]) % N;
      if (add == 0) {
         cout << i + 1 << endl;
         for (int j = 0; j <= i; j++)
            cout << j + 1 << " ";
         return;
      }
      if (my_map.find(add) != my_map.end()) {
         cout << (i - my_map[add]) << endl;
         for (int j = my_map[add] + 1; j <= i; j++)
            cout << j + 1 << " ";
         return;
      }
      else
         my_map[add] = i;
   }
}
int main() {
   int arr[] = {3, 2, 7, 1, 9};
   int N = sizeof(arr) / sizeof(arr[0]);
   subset_find(arr, N);
}

इनपुट

{3, 2, 7, 1, 9}

आउटपुट

2
1 2

  1. सर्कुलर सरणी में अधिकतम योग जैसे कि कोई भी दो तत्व सी ++ में आसन्न नहीं हैं सर्कुलर सरणी में अधिकतम योग जैसे कि कोई भी दो तत्व सी ++ में आसन्न नहीं हैं

    इस समस्या में, हमें एक वृत्ताकार सरणी cirArr[] दी गई है। हमारा काम सर्कुलर सरणी में अधिकतम योग खोजने के लिए एक प्रोग्राम बनाना है जैसे कि कोई भी दो तत्व सी ++ में आसन्न नहीं हैं। समस्या का विवरण वृत्ताकार सरणी के लिए, हमें सरणी के तत्वों का अधिकतम योग ज्ञात करना होगा जैसे कि आसन्न तत्वों को नहीं लि

  1. - एक सरणी तत्व खोजें जैसे कि सभी तत्व इसके द्वारा c++ . का उपयोग करके विभाज्य हैं

    विचार करें कि हमारे पास कुछ तत्वों के साथ एक सरणी ए है। हमें A से एक अवयव इस प्रकार ज्ञात करना है कि सभी तत्वों को इससे विभाजित किया जा सके। मान लीजिए कि ए [15, 21, 69, 33, 3, 72, 81] जैसा है, तो तत्व 3 होगा, क्योंकि सभी संख्याएं 3 से विभाज्य हो सकती हैं। इस समस्या को हल करने के लिए, हम ए में सबसे

  1. - एक सरणी में सभी जोड़े (ए, बी) खोजें जैसे कि सी ++ में% बी =के

    मान लीजिए कि हमारे पास एक सरणी ए है, उस सरणी से, हमें सभी जोड़े (ए, बी) प्राप्त करना है जैसे कि ए% बी =के। मान लीजिए कि सरणी A =[2, 3, 4, 5, 7] और k =3 है, तो जोड़े (7, 4), (3, 4), (3, 5), (3, 7) हैं। इसे हल करने के लिए, हम सूची को देखेंगे और जांचेंगे कि दी गई शर्त संतोषजनक है या नहीं। उदाहरण #inc