【发布时间】:2011-12-17 01:27:17
【问题描述】:
如果连续数字的总和始终是完全平方,则排列是方链的。例如,
8 1 15 10 6 3 13 12 4 5 11 14 2 7 9 16
是数字 1 到 16 的平方链排列。我想编写一个程序来找到数字 1 到 n 的平方链排列,其中 n 从 1 到 100。
最简单的做法是按字典顺序遍历 n 的所有排列(我知道怎么写)并检查方链条件,但这对于 n 大需要很长时间。
一个稍微好一点的方法是一次选择一个排列中的数字,检查以确保我刚刚选择的数字在与前一个数字相加时是一个正方形,并希望我能坚持到最后。不过,我必须备份很多,而且我认为这不会很有效。
有没有更好的方法?另外,这是一个众所周知的问题吗?感谢您的帮助。
【问题讨论】:
-
是否保证存在..例如1 2 3?
-
@MitchWheat 看起来我们很困惑,他得到了两种类型的选票。
-
为什么要关闭投票? OP 已经有两种解决方案了?
-
为什么说回溯方法只是“稍微”好一点?没有彻底分析它,也许你已经分析过了,我猜这种方法会比原来的方法快得多。
标签: algorithm permutation