szukana suma ze zbioru liczb

0

Mam zbiór liczb,
a = 1
b = 2
c = 4
d = 8
e = 16
f = 32
g = 64
h = 128
i = 256
j = 512
k = 1024
l = 2048
m = 4096
n = 8192
o = 16384
p = 65536
r = 131072
s = 262144
t = 524288
u = 1048576
x = 2097152
y = 4194304

potrzebuję znaleźć konkretną znaną mi sumę np. 20 = (c+e), liczby w szukanej sumie nie powtarzają się, czy podpowie mi ktoś jak to zrobić bez pisania długich warunków

if a == w:
	print (a)
elif b == w:
	print (b) 
...

elif a + b == w:
	print (a,b)
elif a + c == w:
	print (a,c)
...

itd.

0

hm odejmij od 20 a i sprawdź czy w zbiorze jest b?, naturalnie w jakiejś pętli odejmuj wszystkie.

0

Podane przez Ciebie liczby to potęgi dwójki. Liczby w systemie binarnym składają się właśnie z sum takich potęg dwójki. Jeżeli masz daną liczbę, zapisaną w systemie binarnym, wystarczy sprawdzić, które bity ma ustawione na 1. Wtedy suma odpowiadających potęg dwójki da nam tę liczbę właśnie. Zapalone bity możesz sprawdzić za pomocą przesunięć bitowych i reszty dzielenia przez 2.

0

Zapomniałem napisać o tym, że wynik może być jedną liczbą a równie dobrze sumą wszystkich ... .

1

n to liczba do rozłożenia (implementacja pomysłu @hfaua, ale bez przesunięć bitowych)

n = int(input("Podaj liczbe: "))
l = []
while n>0:
    l.append(n % 2)
    n/=2 #w Pythonie 3 trzeba użyć n//=2
potega = 1
result = [] 
for i in l:
    if i == 1:
        result.append(potega)
    potega*=2
print(result)

W liście result są składniki. Zapisz kod do pliku (np. rozklad.py) i uruchom program poleceniem python rozklad.py.

0

Dzięki ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1