在Python中找出生成的列表中特定元素的异或值
假设我们有一个包含自然数的列表。现在从该列表中删除其二进制表示中包含两个连续1的所有数字,并生成另一个名为Z的列表。现在我们有另一个列表’input_list’,其中包含一些整数值。我们必须找出Z中指定元素的索引的XOR值。
因此,如果输入为input_list = [3, 4, 5],则输出将为9。
在Z的索引3、4和5中,值分别为4、5和8。因此,4 XOR 5 XOR 8 = 9。
要解决这个问题,我们将遵循以下步骤−
- 定义一个函数zeck_num()。这将带入k、f_list
- res := 0
- for i in range(大小是f_list-1) 到 -1,每次减少1,做以下操作
- 如果k>= f_list[i],则
- res := res + 2^i
- k := k-f_list[i]
- 返回res
- MOD := 10^9 + 7
- max_val := 10^18
- f_list:包含值1和2的新列表
- while f_list的最后一个元素<= max_val,做以下操作
- 在f_list的末尾插入f_list的最后一个元素+ f_list的倒数第二个元素
- res:= 0
- 对于input_list中的每个索引,执行以下操作
- res := res XOR zeck_num(index, f_list)
- 返回res mod MOD
示例
让我们看下面的实现,以更好地理解。
def zeck_num(k, f_list):
res = 0
for i in range(len(f_list)-1,-1,-1):
if k>= f_list[i]:
res += 2**i
k -= f_list[i]
return res
def solve(input_list):
MOD = 10**9+7
max_val = 10**18
f_list = [1,2]
while f_list[-1] <= max_val:
f_list.append(f_list[-1] + f_list[-2])
res = 0
for index in input_list:
res ^= zeck_num(index, f_list)
return res % MOD
print(solve([3, 4, 5]))
输入
[3, 4, 5]
输出
9