मान लीजिए कि हमारे पास संख्याओं की एक सरणी है और दूसरी संख्या k है, तो हमें यह जांचना होगा कि क्या दिए गए सरणी को जोड़े में विभाजित किया जा सकता है जैसे कि प्रत्येक जोड़ी का योग k से विभाज्य है या नहीं।
इसलिए, यदि इनपुट arr =[5, 15, 6, 9] k =7 जैसा है, तो आउटपुट सही होगा क्योंकि हम (5, 9) और (15, 6) जैसे जोड़े ले सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- n :=सरणी का आकार
- यदि n विषम है, तो
- झूठी वापसी
- घटनाएं:=एक खाली शब्दकोश, अगर कुछ कुंजी नहीं है तो उस लापता कुंजी के मान के रूप में 0 लौटाएं
- मैं के लिए 0 से n की सीमा में, करते हैं
- घटनाओं को बढ़ाएं[((सरणी[i] mod k) + k) mod k] 1 तक
- मैं के लिए 0 से n की सीमा में, करते हैं
- शेष :=((सरणी[i] मॉड k) + k) मॉड k
- यदि 2 * शेषफल k के समान है, तो
- यदि घटनाएँ[शेष] विषम हैं, तो
- झूठी वापसी
- यदि घटनाएँ[शेष] विषम हैं, तो
- अन्यथा जब शेषफल 0 के समान हो, तो
- यदि घटनाएं [शेष] और 1 शून्य नहीं है, तो
- झूठी वापसी
- यदि घटनाएं [शेष] और 1 शून्य नहीं है, तो
- अन्यथा जब घटनाएँ [शेष] घटनाएँ [k - शेष] के समान नहीं होती हैं, तब
- झूठी वापसी
- सही लौटें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
from collections import defaultdict def solve(array, k): n = len(array) if n % 2 != 0: return False occurrences = defaultdict(lambda : 0) for i in range(0, n): occurrences[((array[i] % k) + k) % k] += 1 for i in range(0, n): remainder = ((array[i] % k) + k) % k if (2 * remainder == k): if (occurrences[remainder] % 2 != 0): return False elif (remainder == 0): if (occurrences[remainder] & 1): return False elif (occurrences[remainder] != occurrences[k - remainder]): return False return True arr = [5, 15, 6, 9] k = 7 print(solve(arr, k))
इनपुट
[5, 15, 6, 9], 7
आउटपुट
True