问题的评论
-
14日的评论
行为在x = 6174人为地设置为0,这工作会pure-recursive解决方案,但嘿,这是很酷的问题!
495 K常数是3位数。
所以测试691是错误的。
为什么测试只有一个数字?
我错过什么了吗?
我不明白x = 3的测试套件和x = 1。在这种情况下我应该做什么?
对于x = 3,步骤是3000 - 0003 = 2997,9972 - 2799 = 7173,等等。
问题描述是困惑有不同Kaprekar常数取决于数量的数字。[0 9 495 6174 1 2 3 4位数。
得到这个错误:
内部服务器错误——阅读
服务器遇到一个内部错误或者配置错误,无法完成您的请求。
参考3. # c2c1ab8.1412090777.18623697
什么好主意吗?
问题应该指定任意数量少于四位数应该填满四位数与前导零。(如3 - > 0003)
非常漂亮和有趣的问题!
我喜欢这个问题的递归方面。
有一个小问题陈述所需的校正。不是所有的自然数,但可以减少4位数Kaprekar提到数量的方法。同样的3位数可以减少到495人
https://en.wikipedia.org/wiki/D._R._Kaprekar
它是如何工作的x = 1 ? ? ? ? ?
对于那些困惑与测试用例2、3和5,像我一样,做转换的四位整数。这是一个例子:
x = 1:
1000 - 0001 = 999
9990 - 0999 = 8991
9981 - 1899 = 8082
8820 - 0288 = 8532
8532 - 2358 = 6174
因此,y_correct = 5
爱它! ! !
很好。了几分钟,这个问题。
我所做的是x转换成字符串,然后使用排序函数。
解决方案的评论
-
1评论
我习惯用C程序,有人可以向量化以MATLAB方式解决这个问题吗?
函数y = KaprekarSteps (x)
y = 0;
虽然~ (x = = 6174 | | x = = 0)
x (x) =一步;
y = y + 1;
结束
如果x = = 0
y =正;
结束
结束
函数x =一步(x)
数字= getDigits (x);
获得= [1000 100 10 1]';
x_d =排序(数字,“下”)*增益;
x_a =排序(数字,“提升”)*增益;
x = x_d - x_a;
结束
函数数字= getDigits (x)
数字= [0 0 0 0];
因为我= 1:4
数字(我)=修复(x /(10 ^(我)));
x =国防部(x, 10 ^(我));
结束
结束
-
1评论
测试套件不匹配问题的描述——如何测试2的答案是5吗?
-
1评论
欺骗与1…:
1000 - 0001 = 999。
999 - 999 = 0
y =正;
没有?
-
1评论
它如何与x = 3, x = 691, x = 1 ?
-
2的评论
这适用于所有但它给测试3,在我看来,正确的答案8。
但零不是排序在这个解决方案中。你应该得到相同的答案输入x = 691年和6910年。(然后不需要abs ())
1)9610 - 0169 = 9441
2)9441 - 1449 = 7992
3)9972 - 2799 = 7173
4)7731 - 1377 = 6354
5)6543 - 3456 = 3087
6)8730 - 0378 = 8352
7)8532 - 2358 = 6174
-
1评论
这是到目前为止的测试。你需要垫0建立起来的数字是一个4位数的号码。不解释的规则。
-
1评论
并不是所有的测试用例似乎是正确的。例如x = 3将暗示下一个值应该是x = 3 = 0,所以y_correct =正而不是6
-
1评论
一个高效的查找表解决方案