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