算法谜语-根据数字的差异将数字放入数组中



算法RIDDLE

你得到一个数字x,你必须在一个2x大小的数组中设置从1到x的所有twic。规则是,数字必须放在与其值不同的单元格中。例如,如果您这样设置数字2:|2||||bex必须是这样的:|2||2||

假设x=4,那么我们有一个8个单元格的数组,我们可以这样设置数字:1 2 3 4 5 6 7 8|4|2|3|2|4|3|1|

你可以用各种方法来放置数字。

您能对10(数组大小20)、12的数字(数组大小24)执行同样的操作吗?如果是,请说明如何,如果不是,请解释每个数字的原因。

这个问题是NP完全问题,你必须尝试所有的可能性来确定可行性,并得到一组可能的解决方案。

如果你想要一个由函数1/2(4n + (-1)^n - 1)定义的是否可以完成的是/否答案,那么从1…无穷大开始插入n的值将给出是答案的数字序列。不包括证明:)

为了澄清,解集的发现是NP完全的,并且给定N的是/否答案可以使用上面的公式来完成。(我希望我没有在这个问题上搞砸数学,它是一个生成函数)

使用10是不可能的。12是可能的。我尝试了所有13以下的整数,有一个明确的模式我相信可以证明(但我现在不知道如何证明):

1  yes
2  no
3  no
4  yes
5  yes
6  no
7  no
8  yes
9  yes
10 no
11 no
12 yes
13 yes

它可以通过递归函数来解决,该函数尝试各种可能性,如果找不到匹配,则使用回溯。

最新更新