用 Python 编写程序,从生成的列表中找出特定元素的 XOR 值
pythonserver side programmingprogramming更新于 2026/1/26 15:40:17
假设我们得到一个包含自然数的列表。现在,从该列表中,我们删除二进制表示中包含两个连续 1 的所有数字,并生成另一个名为 Z 的列表。现在我们得到另一个包含一些整数值的列表"input_list"。我们必须从 Z 中找出指定元素的 XOR 值,这些元素的索引在 input_list 中指定。
因此,如果输入类似于 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
- 对于范围 (f_list 的大小 -1) 到 -1 内的 i,减少 1,执行
- 如果 k >= f_list[i],则
- res := res + 2^i
- k := k - f_list[i]
- 如果 k >= f_list[i],则
- 返回 res
- MOD := 10^9 + 7
- max_val := 10^18
- f_list := 包含值 1 和 2 的新列表
- 当 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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

