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

यह जाँचने के लिए प्रोग्राम कि क्या हम C++ में समान योग के k-विभाजन वाली सूची को विभाजित कर सकते हैं

मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है और दूसरा मान k, हमें यह जांचना होगा कि क्या संख्याओं को k के विभिन्न उपसमुच्चय में विभाजित करना संभव है जहां प्रत्येक उपसमुच्चय का योग समान है।

इसलिए, यदि इनपुट संख्या =[4, 2, 6, 5, 1, 6, 3] k =3 की तरह है, तो आउटपुट सही होगा, क्योंकि हम उन्हें विभाजित कर सकते हैं जैसे:[6, 3], [6 , 2, 1], और [4, 5]।

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

  • एक फ़ंक्शन चेक को परिभाषित करें (), यह एक सरणी v लेगा,
  • इनिशियलाइज़ i :=1 के लिए, जब i
  • यदि v[i], v[0] के बराबर नहीं है, तो −
    • झूठी वापसी
  • सही लौटें
  • एक फ़ंक्शन dfs() परिभाषित करें, यह idx, एक सरणी संख्या, एक सरणी अस्थायी,
  • लेगा
  • यदि idx अंकों के आकार के समान है, तो −
    • रिटर्न चेक (अस्थायी)
  • रिट:=झूठा
  • इनिशियलाइज़ i :=0 के लिए, जब i <टेम्परेचर का आकार, अपडेट (i से 1 तक बढ़ाएँ), करें −
    • अस्थायी[i] :=अस्थायी[i] + अंक [idx]
    • ret :=dfs(idx + 1, nums, temp)
    • यदि रिट सत्य है, तो −
      • सही लौटें
    • temp[i] :=temp[i] - nums[idx]
  • झूठी वापसी
  • मुख्य विधि से निम्न कार्य करें -
  • के आकार की एक सरणी अस्थायी परिभाषित करें
  • रिटर्न dfs(0, nums, temp)
  • उदाहरण (C++)

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

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
       public:
       bool check(vector<int>& v) {
          for (int i = 1; i < v.size(); i++) {
             if (v[i] != v[0])
                return false;
          }
          return true;
       }
       bool dfs(int idx, vector<int>& nums, vector<int>& temp) {
          if (idx == nums.size()) {
             return check(temp);
          }
          bool ret = false;
          for (int i = 0; i < temp.size(); i++) {
             temp[i] += nums[idx];
             ret = dfs(idx + 1, nums, temp);
             if (ret)
                return true;
             temp[i] -= nums[idx];
          }
          return false;
       }
       bool solve(vector<int>& nums, int k) {
          vector<int> temp(k);
          return dfs(0, nums, temp);
       }
    };
    bool solve(vector<int>& nums, int k) {
       return (new Solution())->solve(nums, k);
    }
    int main(){
       vector<int> v = {4, 2, 6, 5, 1, 6, 3};
       int k = 3;
       cout << solve(v, 3);
    }

    इनपुट

    {4, 2, 6, 5, 1, 6, 3}, 3

    आउटपुट

    1

    1. यह जाँचने के लिए कार्यक्रम कि क्या सूची को जोड़े में विभाजित किया जा सकता है जहाँ योग अजगर में k का गुणक है

      मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है और दूसरा मान k है, हमें यह जांचना होगा कि क्या सूची को जोड़े में विभाजित किया जा सकता है जैसे कि प्रत्येक जोड़ी का योग k से विभाज्य हो। इसलिए, यदि इनपुट nums =[4, 7, 2, 5] k =6 जैसा है, तो आउटपुट ट्रू होगा, क्योंकि हम दी गई सूची को

    1. प्रोग्राम यह जांचने के लिए कि क्या हम पायथन में समान योग के साथ दो विभाजनों का समूह बना सकते हैं या नहीं?

      मान लीजिए हमारे पास संख्याओं की एक सूची है जिसे अंक कहते हैं, हमें यह जांचना होगा कि क्या हम संख्याओं को दो समूहों में विभाजित कर सकते हैं जहां दोनों समूहों में तत्वों का योग समान है। इसलिए, यदि इनपुट संख्या =[2, 3, 6, 5] की तरह है, तो आउटपुट ट्रू होगा, क्योंकि हम समूह बना सकते हैं:[2, 6] और [3, 5]

    1. यह जांचने के लिए कार्यक्रम कि क्या पायथन में सूची सख्ती से बढ़ रही है या सख्ती से घट रही है

      मान लीजिए हमारे पास संख्याओं की एक सूची है; हमें यह जांचना होगा कि सूची सख्ती से बढ़ रही है या सख्ती से घट रही है। इसलिए, यदि इनपुट संख्या =[10, 12, 23, 34, 55] की तरह है, तो आउटपुट सही होगा, क्योंकि सभी तत्व अलग हैं और प्रत्येक तत्व पिछले वाले से बड़ा है, इसलिए यह सख्ती से बढ़ रहा है। इसे हल करने