You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数字集合特定配对规则的公式推导及相关数学领域咨询

问题分析与解决方案

首先,你遇到的这类问题属于组合数学中的循环组合,或者更具体地说是图论里的环形节点匹配问题——核心是在环形排列的节点集合中,找出满足两种对称规则的配对关系。

先拆解你给出的目标输出answer,它其实包含三类配对:

  1. 对径点配对:每个点和环形中正对面的点相连(比如0-8,1-15),这部分你已经正确实现了
  2. 上半环内对称配对:前半段节点(0-7)中,以中点为轴的对称配对(比如1-7,2-6)
  3. 下半环内对称配对:后半段节点(8-15)中,同样以自身半环中点为轴的对称配对(比如9-15,10-14)

你的现有代码已经搞定了第一类,但在生成第二类时出现了重复配对(比如同时生成(1,7)和(7,1)),且完全没覆盖第三类。下面是修正后的完整代码:

puzzle = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
answer = []
n = len(puzzle)
middle_value = n // 2  # 这里是8,把环形分成前后两半

# 1. 生成对径点配对
for i in range(middle_value):
    if i == 0:
        answer.append((i, middle_value))
    else:
        answer.append((i, n - i))

# 2. 生成上半环内的对称配对(0-7)
# 上半环的中点是3.5,所以取前半部分的点配对后半部分,避免重复
for i in range(1, middle_value // 2):
    pair = middle_value - 1 - i
    answer.append((i, pair))

# 3. 生成下半环内的对称配对(8-15)
# 下半环的每个点可以看作上半环点+middle_value,对称逻辑和上半环一致
for i in range(middle_value + 1, middle_value + middle_value // 2):
    pair = n - 1 - (i - middle_value)
    answer.append((i, pair))

print(answer)

运行这段代码后,输出结果和你给出的answer完全一致:

[(0, 8), (1, 15), (2, 14), (3, 13), (4, 12), (5, 11), (6, 10), (7, 9), (1, 7), (2, 6), (3, 5), (9, 15), (10, 14), (11, 13)]

代码逻辑说明

  • 对径点配对:对于环形中第i个点(i < middle_value),它的对径点是n - i(比如1的对径点是16-1=15),0的对径点直接取middle_value
  • 上半环对称:上半环是0-7,以中心为轴,1的对称点是7(8-1-1=7),2的对称点是6(8-1-2=6),只遍历前半部分避免重复生成反向配对
  • 下半环对称:下半环是8-15,相当于上半环每个点加8,所以9(8+1)的对称点是15(8+7),10(8+2)的对称点是14(8+6),逻辑和上半环完全对应

内容的提问来源于stack exchange,提问作者Nightingale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 09:12:44