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位数字可以通过上述方法简化为Kaprekar数。类似地,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_correct = 5
爱它!!!
非常好。花了几分钟来破解这个。
我所做的就是把x转换成字符串,然后使用排序函数。
我习惯于用c编程,有人可以在Matlab方式中有一个矢量化解决方案吗?
函数y = KaprekarSteps(x)
y = 0;
While (x == 6174 || x == 0)
x =步骤(x);
Y = Y + 1;
结尾
如果x == 0
y =正;
结尾
结尾
函数x = step(x)
数字= getDigits (x);
增益= [1000 100 10 1]';
x_d =排序(数字,“下”)*增益;
x_a =排序(数字,“提升”)*增益;
x = x_d - x_a;
结尾
函数digits = getDigits(x)
数字= [0 0 0 0];
因为I = 1:4
数字(i)=修复(x /(10 ^(4-i)));
x =国防部(x, 10 ^(我));
结尾
结尾
测试套件与问题描述不匹配 - 答案如何测试两种?
欺骗了1 ...:
1000 - 0001 = 999。
999 - 999 = 0
y =正;
没有?
x = 3 x = 691 x = 1是怎样的?
除了第三题,这个方法都适用,在我看来,正确答案是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
这是迄今为止最差劲的测试。你需要用0填充这些数字,使其成为一个4位数。规则中没有解释。
并非所有测试用例似乎都是正确的。例如x = 3意味着下一个值应该是x = 3-3 = 0,所以y_correct = inf而不是6
一个有效的查找表解决方案
1927年的求解器
1228个求解器
middleAsColumn:返回除第一个和最后一个元素外的所有元素作为列向量
445个求解器
258个议员
解决1761