xavier 2007-11-4 13:05
雷劈数系列二
雷劈数系列一:[url]http://ruby-lang.org.cn/forums/thread-1844-1-1.html[/url]
[b]寻找雷劈数[/b]
我们已经有了判断一个数是不是雷劈数的方法。就可以开始寻找了
假如需要找到100000以内的所有雷劈数,是不是把他们一个一个带进去判断就可以了呢?
[code]
arr=[]
10.upto(100000){|i|arr << i if thund?(i)} #要把数劈开至少得是两位数,所以从10开始迭代
puts arr.length
p arr
#=>7
#=>[ 81, 100, 2025, 3025, 9801, 10000, 88209]
[/code]
看起来不错,那么找1000000以内的
......
哦不,他太慢了。(我这要一分钟左右)
[b]改进程序[/b]
实际上,最小的雷劈数是81,没有比这再小的了,那么就可以改成从81开始。但是这对运行速度好像没什么影响
再观察一下这些数,嗯...等等,他们都是完全平方数么?
对,根据定义,只有完全平方数才有可能是雷劈数!
我们在迭代的时候只需要完全平方数就可以了,把其他数都忽略掉
[code]
arr=[]
9.upto((1000000**0.5).truncate){|i| arr << (i**2) if thund?(i**2)}
puts arr.length
p arr
[/code]
这下就快多了。
drive2me 2007-11-4 15:22
我们最小的版主(16岁)就能做出如此好的案例,请大家加油。
我们是Ruby精英,你们不认为吗?
如果你不认为是,那你就再加油!!!
大家都能做得很好,那我们一起就做到更好吧!
加油!加油!加油!!!
drive2me 2007-11-4 15:24
[quote]原帖由 [i]xavier[/i] 于 2007-11-4 13:05 发表 [url=http://ruby-lang.org.cn/forums/redirect.php?goto=findpost&pid=7121&ptid=1856][img]http://ruby-lang.org.cn/forums/images/common/back.gif[/img][/url]
雷劈数系列一:[url]http://ruby-lang.org.cn/forums/thread-1844-1-1.html[/url]
寻找雷劈数
我们已经有了判断一个数是不是雷劈数的方法。就可以开始寻找了
假如需要找到100000以内的所有雷劈数,是不是把他们一个一 ... [/quote]
说真的,雷劈数我还是第一次听说,不怕见笑了。
谢谢小X告诉我们这个知识和案例!
admin 2007-11-8 10:49
事实上我也没有看过这个数的名字,呵呵。不过看了就懂了! 英雄出少年啊。
xnine 2007-11-17 09:51
1000000**0.5
这样字的定义是什么意思呢/?
loki 2008-1-15 12:05
果然是英雄出少年
想我16岁的时候还在cs,魔兽呢
荒废了不少时间
顺便问问
truncate方法干什么用的?
p是自定义方法吗?
x116 2008-1-16 09:43
p 相当于 puts
truncate 相当于求整,截断尾数
xavier 2008-1-16 16:39
p和puts还是有区别的
puts 就是输出字符串
而p以字符串的形式输出对象,并尽量保持能让你看出来他的本质
[code]
p "string" => "string"
puts "string" => string
p [1,2,3] => [1,2,3]
puts [1,2,3] =>1
2
3
[/code]
[[i] 本帖最后由 xavier 于 2008-1-16 16:41 编辑 [/i]]
antares_sco 2008-2-18 10:40
恩。。。。。好。。。楼主很乐于思考。。顶
jmouse 2008-2-29 17:38
换一种思路
[code]
$arr=[]
def add(n)
9.step(n,1) {|num|$arr<<num**2 if thund?num}
end
def thund?(number)
n = number ** 2;
s = n.to_s;
len = s.length;
1.upto(len-1) do |i|
a = n / (10**i)
b = n - a * (10 ** i)
return true if (a+b)**2 == n
end
return false
end
add(10000)
puts $arr.length
print $arr.join(", "),"\n"
[/code]
[[i] 本帖最后由 jmouse 于 2008-2-29 17:53 编辑 [/i]]