六个不同图标的排列怎样变成可还原的编号:独立演算第09例

2026-11-08

关卡中六个不同图标有许多排列。若想给每种排列一个连续且可还原的编号,可以按字母顺序比较排列,并记录每一步跳过了多少个较小的可用图标。

图标为A至F,每个恰好出现一次,编号从零开始。第一个位置的贡献是它在剩余有序图标中的下标乘五的阶乘,后续依次乘四、三、二、一、零的阶乘;把所有贡献相加。

这一例的完整输入

八个独立编号为[172, 508, 42, 305, 169, 383, 606, 538];A小于B,依此到F。

逐项计算记录

编号 | 还原排列 | 六个剩余列表下标 | 六项贡献 172 | BDAFCE | [1, 2, 0, 2, 0, 0] | [120, 48, 0, 4, 0, 0] 508 | EBAFCD | [4, 1, 0, 2, 0, 0] | [480, 24, 0, 4, 0, 0] 42 | ACFBDE | [0, 1, 3, 0, 0, 0] | [0, 24, 18, 0, 0, 0] 305 | CDEFBA | [2, 2, 2, 2, 1, 0] | [240, 48, 12, 4, 1, 0] 169 | BDACFE | [1, 2, 0, 0, 1, 0] | [120, 48, 0, 0, 1, 0] 383 | DAFECB | [3, 0, 3, 2, 1, 0] | [360, 0, 18, 4, 1, 0] 606 | FACBDE | [5, 0, 1, 0, 0, 0] | [600, 0, 6, 0, 0, 0] 538 | ECBFAD | [4, 2, 1, 2, 0, 0] | [480, 48, 6, 4, 0, 0]

读表时先把输入与计算后的结果分开。空值表示这一步没有适用对象或没有可用结果,不应自动换成零。编号只负责识别本例中的元素,同一个数字出现在不同字段时,要先确认它代表位置、对象还是数值。

怎样复核和使用

还原时把编号按相应阶乘依次除出下标,从剩余列表取走该图标,余数继续向后处理。六位排列共有720种,合法编号为零至719,解码后的图标不能重复。

此方法依赖元素全部不同,不能直接拿来给包含重复图标的队列编号。它也是一种确定的排序编号,并不自动生成均匀随机排列;想随机抽取还要单独说明抽样规则。

可以先遮住记录表,只按上述规则重算前两步,再选择一个边界条件重新试算。若结果不一致,应逐项检查输入顺序、端点是否包含以及状态在哪一步更新;不要只看最终合计相同就认为中间处理也完全正确。