user14250593
user14250593

Reputation:

How do I fix this program that adds up all the integers in a list except the one that equals said sum?

I am trying to solve a problem where I have to enter several integers as an input (seperated by a whitespace), and print the integer that is the sum of all the OTHER integers.

So e.g.:

1 2 3 would give: 3, because 3 = 1 + 2

1 3 5 9 would give: 9, because 5 + 3 + 1 = 9

This is the code I currently have:

x = input().split(" ")
x = [int(c) for c in x]

y = 0

for i in range(len(x)-1):
    y += x[i]
    del x[i]
    z = sum(x)
    if y == z:
        print(y)
        break
    else:
        x.insert(i,y)

As the output, it just gives nothing no matter what. Does anyone spot a mistake? I'd be ever greatful as I'm just a beginner who's got a lot to learn :)

Upvotes: 1

Views: 64

Answers (4)

itprorh66
itprorh66

Reputation: 3288

If the last number entered is always the sum of previous numbers in the input sequence. Your problem lies with the x.insert(i, y) statement. For example take the following input sequence: '1 2 5 8'

after the first pass through the for loop:
i = 0
z = 15
x = [1, 2, 5, 8]
y = 1
after the second pass through the for loop:
i = 1
z = 14
x = [1, 3, 5, 8]
y = 3
after the third pass through the for loop:
i = 2
z = 12
x = [1, 3, 8, 8]
y = 8
and the for loop completes without printing a result

Upvotes: 1

MarianD
MarianD

Reputation: 14181

(I renamed your strange name x to numbers.)

numbers = input().split()
numbers = [int(i) for i in numbers]

must_be = sum(numbers) / 2
if must_be in numbers:
    print(int(must_be))

The explanation:

If there is an element s such that s = (sum of other elements),
then (sum of ALL elements) = s + (sum of other elements) = s + s = 2 * s.

So s = (sum of all elements) / 2.

Upvotes: 1

Deepak Tripathi
Deepak Tripathi

Reputation: 3243

I think this is a tricky question and can be done in quick way by using a trick i.e create a dictionary with all the keys and store the sum as value like {1: 18, 3: 18, 5: 18, 9: 18} now iterate over dictionary and if val - key is in the dictionary then boom that's the number

a = [1, 3, 5, 9]
d = dict(zip(a,[sum(a)]*len(a)))
print([k for k,v in d.items() if d.get(v-k, False)])

Upvotes: 0

PApostol
PApostol

Reputation: 2292

If it's guaranteed that one of the integers will be the sum of all other integers, can you not just sort the input list and print the last element (assuming positive integers)?

x = input().split(" ")
x = [int(c) for c in x]
print(sorted(x)[-1])

Upvotes: 0

Related Questions