मान लीजिए हमें input_list नामक एक सरणी दी गई है जिसमें पूर्णांक संख्याएं हैं। समस्या यह है कि जांचें कि क्या दी गई सरणी को दो हिस्सों में विभाजित किया जा सकता है, जहां दो हिस्सों के योग का अंतर n के बराबर है। संख्या n पहले से प्रदान की जाएगी।
उदाहरण के लिए, यदि input_list = [9, 2, 5, 6], n = 0 है, तो आउटपुट "Possible" होगा।
हल करने का तरीका
- list_total := input_list के मानों का योग
- यदि (list_total - n) % 2 == 1, तो "Not Possible" लौटाएं
- val := (list_total - n) / 2
- temp_sum := 0
- सरणी के प्रत्येक तत्व के लिए:
- temp_sum += input_list[i]
- यदि temp_sum == val, तो "Possible" लौटाएं
- "Not Possible" लौटाएं
तर्क: यदि दो भागों के योग S1 और S2 हैं, तो S1 + S2 = total और |S1 - S2| = n। इससे S1 = (total - n)/2 मिलता है।
उदाहरण
def solve(input_list, n):
list_total = sum(input_list)
if (list_total - n) % 2 == 1:
return "Not Possible"
val = (list_total - n) / 2
temp_sum = 0
for i in range(len(input_list)):
temp_sum += input_list[i]
if temp_sum == val:
return "Possible"
return "Not Possible"
input_list = [9, 2, 5, 6]
n = 0
print(solve(input_list, n))
इनपुट
[9, 2, 5, 6], 0
आउटपुट
Possible