问题的评论
-
13个评论
我不认为x > 9是正确处理。考虑x = 11。我的解释是,pandigital数量的订单11将包含两个0,两个1和一个每一个数字2到9。使用蛮力方法,我可以检查每一个pandigital数量的订单11,看看它是11的倍数:
数= 0;
挖掘= 0:11;
d0 = 1:9
str =独特(烫发(char (mod (setdiff(挖掘,d0), 10) + ' 0 ')),“行”);
num = str2num ([repmat (char (d0 + ' 0 ')、大小(str, 1), 1) str));
数=数+总和(mod (num 11) = = 0);
结束
很简单,这个循环遍历每个数字开始,除了零,将所有可能的独特排列的数字,然后能被11整除数。这产生一个解决方案的9072000。
注意,这种方法不是一个合适的答案科迪,由于其运行时的一个小时,但最简单的方法是x = 11演示一个正确的解决方案。
雷吉,我想你可能是对的,我想我知道问题是什么我的测试用例。遗憾的是,我不能查看我的怀疑;机器我需要与足够的内存使用蛮力测试x = 11目前使用所有12核运行很长时间计算使用了大约85%的可用内存。我禁用X > 9例解集的现在,直到我可以仔细检查,所以问题现在应该容易得多。如果您的解决方案适用于X < 10,继续提交。
更让人困惑的,我(non-brute-force)方法会导致以下数N (10) = 2246400 (11) = 22896000 N (14) = 26714545200
我遇到组合方法和蛮力方法都同意x = 10 1454400 x = 11, 1454400。我不能强力除此之外,但我一个合理的处理引入的冗余排列当我们有重复数字,由于这两种情况。供参考,我得到3216477600 x = 14。
我的错误,我现在的结果与报道雷吉,得到N (10) = 1454400, N (11) = 9072000, N (14) = 3216477600。
我知道问题是什么,我用的代码测试套件——我忘了把在检查确保第一组数字我已经检查没有计算的代码。这不是一个问题当没有重复(X < 10),但是一旦X > 9,重复开始发生。自从1-2-3-4-0和1-2-3-4-0都是检查和计算,使我的价值高于他们应该。(短版——我忘了“独特”命令)。光明的一面,通过代码逐行找出发生了什么让我使它更快。
现在我们知道为什么这是一个困难的问题!:-)
很对詹姆斯!我花了一些时间来修复错误的重复组合,但它是值得的:D
我只是感觉更好知道甚至阿方索搞砸了一下。如果他能搞砸,我们凡人有什么机会?:-)
Project Euler解x = 19。
这对我来说是一个真正的噩梦。
谢谢你詹姆斯
如果我错了,请纠正我。为什么pandigitalby11 (6) > 0。由于数字的总和是21日,永远的11的倍数。
没关系我的评论xD
这个花了一段时间。
Pandigital订单数量10两个0和1
Pandigital数量的订单11有两个0和1两
Pandigital数量的订单12有两个0,两个1和2两个年代
Pandigital数量的订单13有两个0,两个1 s,两个2 s和两个3 s
等等……起初我还不清楚,在网上我没有找到任何关于pandigital数字的顺序。此外,如果需要更多的一个例子:pandigit11 (9) = 285120;和pandigital (12) = 59875200。
解决方案的评论
-
2的评论
哇,我非常深刻的印象!(只是为了完成,如果我理解正确x > = 20我相信你会需要一个刺激(阶乘(histcounts……而不是刺激(histcounts……,对吧?)
是的,你是对的。:-)
-
1评论
测试套件改变来防止这样的解决方案。金宝搏官方网站
-
3评论