3

问题如下:

通过分别用 1、2、9 和 6 替换单词 CARE 中的每个字母,我们形成一个平方数:1296 = 36^(2)。值得注意的是,通过使用相同的数字替换,字谜 RACE 也形成了一个平方数:9216 = 96^(2)。我们将称 CARE(和 RACE)为方形字谜词对,并进一步指定前导零是不允许的,不同的字母也不能与另一个字母具有相同的数字值。

使用 words.txt(右键单击并“将链接/目标另存为...”),一个 16K 的文本文件,其中包含近两千个常用英文单词,找到所有方形字谜单词对(回文单词不被视为本身的字谜)。

由这样一对中的任何成员组成的最大平方数是多少?

注意:形成的所有字谜必须包含在给定的文本文件中。

我不明白 CARE 到 1296 的映射?这是如何运作的?还是所有排列映射都意味着要尝试,即所有字母到 1-9?

4

4 回答 4

5

允许将所有数字分配给字母。所以 C=1, A=2, R=3, E=4 将是一个可能的分配......除了 1234 不是正方形,所以这不好。

也许另一个例子可以帮助说明清楚?如果我们指定 A=6、E=5、T=2,那么TEA = 256 = 16² 和EAT = 625 = 25²。所以 (TEA=256, EAT=625) 是一个方形字谜词对。

(仅仅因为允许将所有数字分配给字母,并不意味着实际尝试所有这些分配是解决问题的最佳方法。可能还有其他一些更聪明的方法。)

于 2010-12-04T20:30:43.150 回答
3

简而言之:是的,所有排列都需要尝试。

于 2010-12-04T20:30:27.397 回答
1

如果您测试数字的所有替换字母,那么您正在寻找具有以下属性的正方形对:

  • 有相同的长度
  • 与输入字符串中的出现次数相同。

找到所有这些正方形对会更快。有 68 个长度为 4 的方格,216 个长度为 5 的方格,...通过上层属性过滤所有相同长度的方格将生成“少量”对,这是您正在寻找的解决方案。

这些数据是“静态的”,不依赖于输入字符串。它可以计算一次并用于所有输入字符串。

于 2010-12-05T12:45:44.327 回答
1

唔。这个怎么放。将 Project Euler 放在一起的人承诺,每个问题都有一个不到一分钟的解决方案,而且我认为只有一个问题可能无法实现这一承诺,但事实并非如此。

是的,您可以排列数字,并尝试对所有正方形进行所有排列,但这将是一个非常大的搜索空间,根本不可能是 (TM) 正确的事情。一般来说,当你看到你对问题的“观察”会产生一个花费太长时间的搜索时,你需要搜索其他东西。

比如,假设你被要求确定两个素数相乘的结果是 1 到 1 亿。您可以考虑从 1 到数亿之间的每个数字,但是将两个素数的所有组合相乘并相乘可能会更快。由于您正在查看组合,您可以从两个开始,直到结果太大,然后对三个做同样的事情,等等。相比之下,这应该快得多 - 而且您不必将所有数字相乘出来,你可以记录所有素数,然后将它们相加,然后找到每个素数的极限,给你一个可以加起来的数字列表。

有很多创新的解决方案,但你想到的第一个——尤其是你在 Project Euler 描述问题时想到的那个,很可能是错误的。

那么,你怎么能解决这个问题呢?可能有太多排列要看,但也许您可以通过映射和比较映射找出一些东西?

(尽量避免全部泄露。)

于 2011-11-08T06:49:57.767 回答