谁的电脑能在一天内得出结果?拜服!!
ruby吧
全部回复
仅看楼主
level 9
双鱼才 楼主
前天在网上寻找计算ruby运行时间的方法,突发奇想改了一下,运行了两个钟都没结果,简略算算,我的电脑是不可能在一天内完成的。我把14改成20,改完的代码见二楼
2014年12月21日 12点12分 1
level 9
双鱼才 楼主
min = Math.sqrt(1).to_i
max = Math.sqrt(10**20).to_i
def isH(num)
num = num.to_s
return num == num.reverse
end
for num in (min..max)
if isH num
z = num**2
if isH z
puts z
end
end
end
2014年12月21日 12点12分 2
level 9
双鱼才 楼主
源代码如下,加了计算时间的代码而已,原题20为14
t1 = Time.now.to_f
min = Math.sqrt(1).to_i
max = Math.sqrt(10**14).to_i
def isH(num)
num = num.to_s
return num == num.reverse
end
for num in (min..max)
if isH num
z = num**2
if isH z
puts z
end
end
end
t2 = Time.now.to_f
puts t2-t1
2014年12月21日 12点12分 3
level 9
双鱼才 楼主
运行原程序我只用了6秒不到
2014年12月21日 12点12分 4
level 9
双鱼才 楼主
所以我有个问题,能用ruby优化这程序,以达到这效果么?效率嘛,我算了一下,运行原程序(没将14改成20之前)时,如果大概只需0.087秒的话就能达到一天运算到20,ruby行么?或者你们的电脑牛逼。。。
2014年12月21日 12点12分 5
level 9
双鱼才 楼主
非黑,想学习一下而已
2014年12月21日 12点12分 6
level 9
1212225222121
1214428244121
1232346432321
1234567654321
4000008000004
4004009004004
7.21770485
Pentium(R) Dual-Core CPU E6300 @ 2.80GHz
这种需要速度的地方, 用C可以提速 1/3, 查表可以提速1/2
2014年12月22日 08点12分 7
具体程序什么情况,我刚学啊[鄙视]
2014年12月22日 08点12分
我去,你那CPU好高频,你试跑那个原程序如何?
2014年12月22日 08点12分
什么是查表~
2014年12月22日 08点12分
回复
˫����
:打表,然后在表中查询。
2015年06月14日 13点06分
level 9
双鱼才 楼主

2014年12月23日 13点12分 8
level 10
=_=
2014年12月24日 16点12分 9
-_-||
2014年12月24日 21点12分
level 9
双鱼才 楼主
我试着我的想法修改,都比这个原程序慢很多,求大神
2014年12月31日 05点12分 10
level 11
咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯了
2015年01月07日 00点01分 11
什么情况
2015年01月07日 06点01分
level 10
=_=
2015年01月11日 02点01分 13
[咦]
2015年01月11日 11点01分
level 1
谁的电脑一天也跑不出来
这个问题不需要大量运算 电脑再快也没用
因为涉及到 大量的判断
用 Python 甚至比 C 写出来的程序更快
2015年01月23日 07点01分 14
不懂
2015年01月24日 07点01分
level 2
2015年01月27日 05点01分 15
我的也是6秒,我弟的只需4秒
2015年01月30日 16点01分
level 1
1
4
9
121
484
10201
12321
14641
40804
44944
1002001
1234321
4008004
100020001
102030201
104060401
121242121
123454321
125686521
400080004
404090404
10000200001
10221412201
12102420121
12345654321
40000800004
1000002000001
1002003002001
1004006004001
1020304030201
1022325232201
1024348434201
1210024200121
1212225222121
1214428244121
1232346432321
1234567654321
4000008000004
4004009004004
3.827280044555664
2015年05月07日 07点05分 16

2015年05月08日 11点05分
level 9
我机子比较老,应该在1s多一点儿吧。
t1 = Time.now.to_f
min = Math.sqrt(1).to_i
max = Math.sqrt(10**20).to_i
max_sqrt=Math.sqrt(max).to_i
arr=[]
for num in (min..max_sqrt)
str = num.to_s
r_str = str.reverse
num1 = str[0...-1] + r_str
if num1 == num1.reverse
arr << num1.to_i
end
num2 = str + r_str
if num2 == num2.reverse
arr << num2.to_i
end
end
for num in arr.sort
if num > max
break
end
z = num**2
if z.to_s == z.to_s.reverse
puts z
end
end
t2 = Time.now.to_f
puts t2-t1
2015年05月23日 12点05分 17
楼主的算法复杂度是O(n^(1/2))。我写的这个是O(n^(1/4))。所以,即便10^20,大约1s就出结果了。根本不用一天。
2015年05月24日 00点05分
回复
��ӣ����ѩ
:我初学,不懂其中原理,如何看出算法速率?
2015年05月24日 01点05分
回复 双鱼才 :呃,看不出速率,只能分析出时间复杂度。我写的是渐近复杂度。具体定义比较麻烦,一两句解释不清,查一下资料吧。
2015年05月24日 02点05分
一秒?不行吧,真的,不如试着算算看,绝对不可能
2015年07月20日 16点07分
level 6
我换个算法可以加速100倍
2015年07月16日 00点07分 18
[吐舌]
2015年07月18日 17点07分
怎么算,可以发源码么?
2015年07月18日 17点07分
回复
˫����
: 对称数有一定规则,你产生对称数,然后开根号,比较快。因为数量小多了。
2015年07月18日 23点07分

2015年07月20日 16点07分
1