Мне была предложена следующая задача: учитывая s и x, вычислить количество решений (a, b), которые удовлетворяют как 1) s = a + b, так и 2) x = a XOR b. Все величины и операции являются целыми.XOR и слишком много итераций?
Example Inputs:
s = 10
x = 4
Output:
2
Никакие модули не могут быть импортированы.
Я написал следующие ответы, которые все слишком долго:
Первое:
def answer(s,x):
tally = 0
z = 0
while z <= s:
p = s - z
q = int(z^p)
if x == q:
tally += 1
z += 1
return tally
Второе:
def answer(s,x):
spotlist, forwardlist = range(0,s+1)
backwardlist = range(s,-1,-1)
tally = 0
for spot in spotlist:
if x == forwardlist[spot]^backwardlist[spot]:
if s == forwardlist[spot] + backwardlist[spot]:
tally +=1
print tally
Третье:
def answer(s,x):
tally = 0
z = 0
while z <= s:
q = int(z^(s - z))
if x == q:
tally += 1
else:
pass
z += 1
print tally
Я думаю, что я» m что-то не хватает или итерации по номерам перед удалением некоторых возможных решений.
Вы, похоже, оставили решающую часть проблемы. Вы не сказали, почему вы итерации. Похоже, проблема заключается не в том, что вы сказали, а в том, что вы должны рассмотреть некоторый диапазон значений. Каков источник этой проблемы? –
Возможный дубликат [С учетом XOR & SUM двух чисел. Как найти номера?] (Http://stackoverflow.com/questions/18732329/given-xor-sum-of-two-numbers-how-to-find-the-numbers) – wldsvc
@ thebjorn имеет [оптимизированное решение к добавлению проблем] (http://stackoverflow.com/questions/11792708/generate-all-possible-combinations-from-a-int-list-under-a-limit); обратите внимание на использование наборов, кеширование и предотвращение дополнительных поисковых запросов: см. дубликат по причинам, по которым SUM и XOR не могут быть выполнены для всех значений. – JGreenwell