मान लीजिए कि हमारे पास n भिन्न दूसरे मानों की एक सरणी है। हमें यह जांचना है कि क्या 12 बजे से शुरू करना संभव है और दिए गए सेकंड को जोड़कर या घटाकर 12 पर वापस जाना संभव है या नहीं। हम दिए गए सभी सेकंड का एक बार उपयोग कर सकते हैं, हम या तो सेकंड जोड़ सकते हैं या घटा सकते हैं।
इसलिए, यदि इनपुट सेकंड =[40,90,50] की तरह है, तो आउटपुट सही होगा क्योंकि यह 40 जोड़ सकता है फिर 90 घटा सकता है और फिर 50 जोड़ सकता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- आकार:=2^(सेकंड सरणी की लंबाई)
- सी श्रेणी में 0 से आकार -1 के लिए, करें
- जोड़ें:=0
- जे के लिए 0 से सेकंड के आकार में - 1, करो
- यदि c और (2^j) शून्य नहीं है, तो
- जोड़ें:=+ सेकंड जोड़ें[j]
- अन्यथा,
- जोड़ें:=जोड़ें-सेकंड[j]
- यदि c और (2^j) शून्य नहीं है, तो
- यदि जोड़ (24 * 60) से विभाज्य है, तो
- सही लौटें
- झूठी वापसी
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(seconds): size = 2**len(seconds) for c in range(size): add = 0 for j in range(len(seconds)) : if c & (1 << j): add += seconds[j] else: add -= seconds[j] if add % (24 * 60) == 0: return True return False seconds = [40,90,50] print(solve(seconds))
इनपुट
[40,90,50]
आउटपुट
True