问题的评论
-
14日的评论
在x=6174处的行为被人为地设置为0,这破坏了纯递归解,但嘿,这是一个很酷的问题!
3位的K常数是495。
所以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位数都可以用上述方法简化为卡普雷卡尔数。类似地,3位数字可以减少到495
https://en.wikipedia.org/wiki/D._R._Kaprekar
x = 1是怎么回事?????
对于那些对测试用例2、3和5感到困惑的人,就像我之前一样,将其转换为4位整数。下面是一个例子:
X = 1:
1000-0001 = 999
9990-0999 = 8991
9981-1899 = 8082
8820-0288 = 8532
8532-2358 = 6174
因此,y_right = 5
爱它! !
很好。花了几分钟才破解这个。
我所做的是将x转换成字符串然后使用排序函数。
解决方案的评论
-
1评论
我习惯用C语言编程,有没有人可以用MATLAB的方式向量化解决这个问题?
函数y = KaprekarSteps(x)
Y = 0;
当~(x == 6174 || x == 0)
X =步长(X);
Y = Y + 1;
结束
如果x == 0
Y = inf;
结束
结束
函数x = step(x)
digits = getDigits(x);
增益= [1000 100 10 1]';
X_d =排序(数字,“下降”)*增益;
X_a =排序(数字,“上升”)*增益;
X = x_d - x_a;
结束
函数数字= getDigits(x)
数字= [0 0 0 0];
对于I = 1:4
Digits (i) = fix(x/(10^(4-i)));
X = mod(X,10^(4-i));
结束
结束
-
1评论
测试套件与问题描述不匹配——测试二的答案怎么可能是5?
-
1评论
被1…骗了
1000 - 0001 = 999。
999 - 999 = 0
Y = inf;
没有?
-
1评论
当x = 3 x = 691 x = 1时如何计算?
-
2的评论
这适用于所有的测试,除了测试3,在我看来,它给出了正确的答案8。
但是0在这个解中是没有排序的。对于输入x = 691和6910,您应该得到相同的答案。(然后就不需要腹肌了)
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评论
这是迄今为止最差劲的一次测试。您需要用零填充数字,将其构建为一个4位数的数字。规则中没有解释。
-
1评论
并非所有的测试用例似乎都是正确的。例如,x=3意味着下一个值应该是x=3-3=0,因此y_correct=Inf而不是6
-
1评论
一个高效的查找表解决方案
问题近期解决方案1573
提出问题
解决14218
middleAsColumn:返回除第一个和最后一个元素外的所有列向量
解决482
解决697
解决2595
解决5667