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

C++ में समान औसत के साथ स्प्लिट ऐरे

मान लीजिए कि हमारे पास एक सरणी ए है, हमें ए के प्रत्येक तत्व को सूची बी या सूची सी में ले जाना चाहिए। (ये सूचियां बी और सी शुरू में खाली हैं।) हमें यह जांचना है कि इस तरह की चाल के बाद, यह संभव है कि औसत मूल्य B का, C के औसत मान के बराबर है, और B और C दोनों खाली नहीं हैं।

तो अगर इनपुट इस तरह है - [1,2,3,4,5,6,7,8,9,10], तो परिणाम सही होगा,

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

  • n:=A का आकार, कुल:=0
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • कुल :=कुल + A[i]
  • संभव है :=असत्य, m :=n / 2
  • इनिशियलाइज़ i :=1 के लिए, जब i <=m और not isPosible non-zero है, तो अपडेट करें (i को 1 से बढ़ाएँ), करें −
    • यदि कुल * i mod n 0 के समान है, तो −
      • संभव है:=सत्य
  • यदि संभव नहीं है तो गैर-शून्य है, तो −
    • झूठी वापसी
  • एक 2D सरणी dp आकार (कुल + 1) x (n / 2) + 1) परिभाषित करें
  • dp[0, 0] :=true
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • x :=ए[i]
  • इनिशियलाइज़ j :=टोटल के लिए, जब j>=x, अपडेट करें (j को 1 से घटाएं), −
      करें
    • इनिशियलाइज़ l :=1 के लिए, जब l <=(n / 2), अपडेट करें (l को 1 से बढ़ाएँ), करें −
      • dp[j, l] :=dp[j, l] या dp[j - x, l - 1]
  • इनिशियलाइज़ i :=1 के लिए, जब i <=(n/2), अपडेट करें (i को 1 से बढ़ाएँ), −
      करें
    • यदि (कुल * i) mod n 0 के समान है और dp[total * i / n, i] गैर-शून्य है, तो −
      • सही लौटें
  • झूठी वापसी
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       bool splitArraySameAverage(vector<int>& A) {
          int n = A.size();
          int total = 0 ;
          for(int i = 0; i < n; i++) total += A[i];
          bool isPossible = false;
          int m = n / 2;
          for (int i = 1; i <= m && !isPossible; ++i)
          if (total*i%n == 0) isPossible = true;
          if (!isPossible) return false;
          vector < vector <bool> > dp(total + 1, vector <bool>((n / 2) + 1));
          dp[0][0] = true;
          for(int i = 0; i < n; i++){
             int x = A[i];
             for(int j = total; j >= x; j--){
                for(int l = 1; l <= (n / 2); l++){
                   dp[j][l] = dp[j][l] || dp[j - x][l - 1];
                }
             }
          }
          for(int i = 1 ; i <= (n / 2); i++){
             if((total * i) % n == 0 && dp[total * i / n][i]) return true;
          }
          return false;
       }
    };
    main(){
       Solution ob;
       vector<int> v = {1,2,3,4,5,6,7,8,9,10};
       cout << (ob.splitArraySameAverage(v));
    }

    इनपुट

    {1,2,3,4,5,6,7,8,9,10}

    आउटपुट

    1

    1. सी ++ में प्रमुख आवृत्तियों वाले ऐरे तत्व?

      सरणी समान डेटा प्रकार के तत्वों का एक कंटेनर है। प्राइम फ़्रीक्वेंसी इसका मतलब है कि सरणी के तत्व की घटना की संख्या एक प्रमुख संख्या है। तो, इन परिभाषाओं के आधार पर अभाज्य आवृत्तियों वाले सरणी तत्वों को खोजने में समस्या। हमें सरणी की एक स्ट्रिंग दी गई है। हमें वर्णों की आवृत्ति का पता लगाना होगा

    1. सी ++ में दोनों तरफ सम या विषम संख्याओं की समान गणना के साथ ऐरे इंडेक्स

      यहां हम एक समस्या देखेंगे, मान लीजिए कि एक सरणी दी गई है। एन तत्व हैं। हमें एक सूचकांक ज्ञात करना है, जहाँ इसके बायीं ओर की सम संख्याओं की बारंबारता और इसके दायीं ओर की सम संख्याओं की बारंबारता समान हो, या इसके बायीं ओर की विषम संख्याओं की आवृत्ति इसके दाईं ओर की विषम संख्याओं की आवृत्ति के समान हो।

    1. सी ++ में एक वास्तविक संख्या बनाम चर के साथ सरणी प्रारंभ करना

      एक सरणी सन्निहित स्मृति स्थान पर समान प्रकार के तत्वों का एक संग्रह है। सरणी में सबसे कम पता पहले तत्व से मेल खाता है जबकि उच्चतम पता अंतिम तत्व से मेल खाता है। सरणी अनुक्रमणिका शून्य (0) से शुरू होती है और सरणी शून्य से एक (सरणी आकार -1) के आकार के साथ समाप्त होती है। एक सरणी को चर के साथ-साथ वास्