В этой программе я создаю подмножество всех возможных наборов, и после этого я выполняю побитовую операцию ('ИЛИ', '|') для каждого набора, и после этого я добавляю их, беру мод и печатаю ответ.
Например:
n=3(Size of array or list)
b= 2 5 5
все возможные наборы:
[[2,5],[2,5],[5,5],[2,5,5]]
[2,5]=7, [2,5]=7, [5,5]=5, [2,5,5]=7
Добавьте все это: 7+7+5+7=26
import itertools
def subs(l):
res=[]
for i in range(2,len(l)+1):
for combo in itertools.combinations(l,i):
res.append(list(combo))
return res
def bitwise_operation(c):
#print("List of c : ",c)
if(len(c)>1):
bitwise=c[0]|c[1]
#print("Before del C : ",c)
del c[0:2]
#print("After del C : ",c)
c.append(bitwise)
#print("After append C : ",c)
if(len(c)>1):
bitwise_operation(c)
print(c[0])
return c[0]
n=int(input())
bit=[]
a=list(map(int,input().split()))
b=[]
if len(a)!=n:
exit()
else:
b=subs(a)
#print(b)
for j in range(len(b)):
for k in range(len(b[j])-1):
if len(b[j])>1:
bitwise=bitwise_operation(b[j])
#print(bitwise)
bit.append(bitwise)
prev_ans=sum(bit)
ans=prev_ans%1000000007
print(ans)
Проблема в том, что когда я выполняю побитовую операцию с использованием рекурсивного function(bitwise_operation) [2,5,5]=[2,5]->7,[7,5]->7..........
, возвращаемое значение для этого равно [2,5,5]=7
Возвращает 7, 7
дважды в одном наборе.
Как я могу это исправить?