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

उन योगों का पता लगाएं जिनके लिए एक सरणी को समान योग के उप-सरणी में पायथन में विभाजित किया जा सकता है

मान लीजिए कि हमारे पास पूर्णांक ए की एक सरणी है; हमें योग के लिए सभी मानों को खोजना होगा ताकि एक मान के लिए योग [i] सरणी को योग योग [i] के उप-सरणी में विभाजित किया जा सके। यदि हम सरणी को समान योग के उप-सरणी में विभाजित नहीं कर सकते हैं तो -1 लौटाएं।

इसलिए, यदि इनपुट ए =[2, 4, 2, 2, 2, 4, 2, 6] जैसा है, तो आउटपुट [6,8,12] होगा क्योंकि सरणी को उप-सरणी में विभाजित किया जा सकता है योग 6, 8 और 12. ये इस प्रकार हैं:[{2, 4}, {2, 2, 2}, {4, 2}, {6}] [{2, 4, 2}, {2, 2 , 4},{2, 6}] [{2, 4, 2, 2, 2},{4, 2, 6

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

  • n :=आकार का

  • तालिका:=आकार n की एक सरणी और 0 से भरी हुई

  • तालिका [0] :=a[0]

  • 1 से n की सीमा में i के लिए, करें

    • टेबल [i] :=a[i] + टेबल[i - 1]

  • एस:=टेबल [एन -1]

  • my_map :=एक नया नक्शा

  • मेरे लिए 0 से n की सीमा में, करें

    • my_map[तालिका[i]] :=1

  • उत्तर:=एक नया सेट

  • i के लिए श्रेणी 1 से पूर्णांक भाग ((S) का वर्गमूल) + 1, करें

    • यदि S mod i 0 के समान है, तो

      • is_वर्तमान :=सत्य

      • part_1 :=मैं

      • part_2 :=S / i का भागफल

      • j के लिए part_1 से S + 1 की श्रेणी में, प्रत्येक चरण में part_1 द्वारा अपडेट करें, करें

        • अगर j my_map में नहीं है, तो

          • is_वर्तमान :=असत्य

          • लूप से बाहर आएं

      • यदि is_present सत्य है और part_1 S के समान नहीं है, तो

        • उत्तर का (भाग_1) जोड़ें

      • is_वर्तमान :=सत्य

      • j के लिए (S / i) से S + 1 के श्रेणी भागफल में, प्रत्येक चरण में S // i, do द्वारा अपडेट करें

        • अगर j my_map में नहीं है, तो

          • is_वर्तमान :=असत्य;

          • लूप से बाहर आएं

      • यदि is_present और part_2 S के समान नहीं है, तो

        • उत्तर का (भाग_2) जोड़ें

  • यदि उत्तर का आकार 0 के समान है, तो

    • वापसी -1

  • वापसी उत्तर

उदाहरण

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

from math import sqrt
def find_sum(a) :
   n = len(a)
   table = [0] * n
   table[0] = a[0]
   for i in range(1, n) :
      table[i] = a[i] + table[i - 1]
   S = table[n - 1]
   my_map = {}
   for i in range(n) :
      my_map[table[i]] = 1
   answer = set()
   for i in range(1, int(sqrt(S)) + 1) :
      if (S % i == 0) :
         is_present = True;
         part_1 = i
         part_2 = S // i
         for j in range(part_1 , S + 1, part_1) :
            if j not in my_map :
               is_present = False
               break
         if (is_present and part_1 != S) :
            answer.add(part_1)
         is_present = True
         for j in range(S // i , S + 1 , S // i) :
            if j not in my_map:
               is_present = False;
               break
         if (is_present and part_2 != S) :
            answer.add(part_2)
   if(len(answer) == 0) :
      return -1
   return answer
a = [2, 4, 2, 2, 2, 4, 2, 6]
print(find_sum(a))

इनपुट

[2, 4, 2, 2, 2, 4, 2, 6]

आउटपुट

{8, 12, 6}

  1. पायथन प्रोग्राम में सरणी का योग ज्ञात करें

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

  1. सरणी का योग खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन एक इनपुट के रूप में एक सरणी को देखते हुए, हमें दिए गए सरणी के योग की गणना करने की आवश्यकता है। यहां हम ब्रूट-फोर्स अप्रोच का अनुसरण कर सकते हैं, यानी एक सूची को पार करना और प्रत्येक तत्व को एक खा

  1. n . से विभाजित सरणी गुणन के अनुस्मारक खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे - समस्या कथन कई संख्याओं और एक संख्या इनपुट n को देखते हुए, हमें n से विभाज्य सभी संख्या को गुणा करने के बाद शेष को प्रिंट करना होगा। दृष्टिकोण सबसे पहले, शेष की गणना arr[i]% n की तरह करें। फिर इस शेष को वर्तमान परिणाम से गुणा क