【发布时间】:2014-07-11 02:13:32
【问题描述】:
我有一个号码,想看看我是否将这个号码乘以一个实数,如果新号码的位数与前一个号码完全相同,只是重新排列。例如,如果我想将一个数字乘以 2 并查看数字是否保持不变,我会这样做
125874
=> 251748
251748 是 125874 乘以 2,两个数字具有完全相同的数字,只是重新排列。为简单起见,我现在只用 2 的倍数对其进行测试。这是我尝试做的,但失败了。
x = 125874
array = x.to_s.chars.map{|x|x.to_i}
=> [1,2,5,8,7,4]
array.permutation.include?((x * 2).to_s.chars.map{|x|x.to_i}
=> true
现在,我尝试循环运行此程序,以查找所有 100,000 以下符合此条件的数字。
range = (1..100000).to_a
range.select do |x|
array = x.to_s.chars.map{|x|x.to_i}
array.permutation.include?((x * 2).to_s.chars.map{|x|x.to_i}
end
=> []
现在,它应该在该数组中记录了至少 125874,因为 125874 * 2 等于 251748,即 125874 的排列。
我想我设法在这件事上摆脱了自己的困惑。
【问题讨论】:
-
如果您发现我的答案(截至 8 月 4 日的唯一答案)有帮助,请考虑选择它。
标签: ruby algorithm range permutation digit