jmouse 2008-4-8 09:33
2008-04-08 Ruby 测试题(00010)
2的15次方是32768,每个数字之和是:3 + 2 + 7 + 6 + 8 = 26
那么,2的1000次方每个数字之和是多少呢?
(先做这个,随后上附加题)
bbschat 2008-4-8 09:42
1366
别告诉我还有更简单的方法来计算 :)
**** Hidden Message *****
[[i] 本帖最后由 bbschat 于 2008-4-8 09:44 编辑 [/i]]
drive2me 2008-4-8 10:05
你的已经够简单了,:lol 。
calebx 2008-4-8 10:52
我要变成代码偷窃者咯。。。
jayliu 2008-4-8 11:04
我的方法肯定不是最简单的,还是看看高手最简单的吧
bbschat 2008-4-8 11:36
哪个,顺便问一下 jmouse
Project Euler 做了几题了?这两天我把进度推进到了64 题,可是现在看不到 Top1000了,不知道还差多少能进榜。
AllenDang 2008-4-8 15:03
1366,不知道算不算简单。
**** Hidden Message *****
jmouse 2008-4-8 15:16
回复 6# 的帖子
Your current rating is 40% genius, having solved 75 out of 188 problems.
我是按难度来做的。
目前为止跳过了两道。
一个是76,一个是54。
76我用回溯,但是应付100好像时间太长了,我没信心继续运行下去,准备换方法。
54我嫌太复杂,恩,准备把54简化一下过几天出在这里,哈哈。
之前有一道题,没用RUBY写,是那个猜密码的,用纸+笔,1分钟就出结果了。
[[i] 本帖最后由 jmouse 于 2008-4-8 15:18 编辑 [/i]]
bbschat 2008-4-8 17:05
我做题看兴趣,基本上按难度排吧,难度小于第 99 题的都 Over了。
但也跳着做,比如 102,108,122 我就过了。
刚刚下午又推进了2题,Now is 35% genius, having solved 66 out of 188 problems
54 过了,梭哈~我喜欢,花了2个半小时去解。以后可以做个游戏了。
76还没看,密码那题我暴力列出前20位所有的可能性,然后查找符合“The ”的字符,果然有还只有1个,呵呵~
[[i] 本帖最后由 bbschat 于 2008-4-8 17:15 编辑 [/i]]
xavier 2008-4-8 17:43
**** Hidden Message *****
[[i] 本帖最后由 xavier 于 2008-4-8 17:49 编辑 [/i]]
bbschat 2008-4-8 17:56
回复 10# 的帖子
我以前也是用 split 分割,后来我发现 scan 也能分割,而且后面可以直接跟 代码块,不用加上 .each ,就换成 scan 了,至于哪个方法效率高倒是没比较过,至少代码是省一点是一点。 :lol
xavier 2008-4-8 18:14
用Benchmark跑了一下,发现还是split快一些
user system total real
scan 1.469000 0.000000 1.469000 ( 1.468000)
split 0.968000 0.000000 0.968000 ( 0.969000)
bbschat 2008-4-8 21:36
Benchmark 还是蛮有用的,就是用起来有点麻烦。
不怎么舒服,楼上各位有没有好的模版参考下?
傍晚时分又推进了 2 题,081 为了调整坐标把我折腾得够呛。
069 硬算了前 5 个最大数字立马找到规律,20分钟解决~
Your current rating is 36% genius, having solved 68 out of 188 problems.
595959 2008-4-8 22:06
来踩拉~[code]def initialize
@a = g((2**1000).to_s)
end
def g(x)
s = 0
for i in 0...x.size
s += x.at(i).to_i
end
return s
end[/code]
jmouse 2008-4-8 22:52
做了81就可以想82了。
69貌似我没花多少时间。[code]def Euler69(x)
$arr=[]
$arr<<2
$arr<<3
ret = 6
while ret < x
NextPrime()
ret *= $arr.last
end
puts ret/$arr.last
end
def isPrime?(number)
n = 0
while $arr[n]**2<=number
return false if number % $arr[n] == 0
n += 1
end
return true
end
def NextPrime()
n = $arr.last + 2
while true
if isPrime?n then
$arr<<n
break
end
n += 2
end
end
#test
Euler69(1000000)[/code]另外,我说手工做的不是那个圣经的密码,圣经这个我是暴力猜三位用ASCII码范围来看的。
我手工做的是79题。
jmouse 2008-4-9 09:35
附加题来了。
把题目里的1000改成100000。
说是附加,其实是因为我做这道题目的时候还不知道Ruby的整型精度有那么高,白写了那么堆代码,好不甘心啊。
可以顺便讨论下在Ruby内部是怎么处理形如100!以及2的1000次方这类大数的,为什么精确度那么高的情况下又算得那么快。不知道谁能找到些资料来学习学习。
bbschat 2008-4-9 11:03
100000不够,Ruby 还是可以直接算,还得再加 1 个0,
By The Way 直接在Scite 显示 2 ** 100000 让我死机了 。。。。。。:L
jmouse 2008-4-9 13:10
如图,刚上去就看见了。
102本来想用矢量乘做的,后来偷懒了,直接一排的IF ELSE搞定。
bbschat 2008-4-9 19:54
今天战果:
Your current rating is 39% genius, having solved 73 out of 188 problems.
比较有意思的是第 71 题,一行代码解决~
然后看到73题,以为同样简单,结果被71的老套路给套死了,换成死办法才出结果。汗自己一个~
[[i] 本帖最后由 bbschat 于 2008-4-9 22:41 编辑 [/i]]
bbschat 2008-4-10 21:51
Your current rating is 42% genius, having solved 79 out of 188 problems.
82搞定看了眼 83 ,晕了,竟然还没完没了了 ~~~ 收工,今天不做题了
feza 2008-4-11 09:54
单行....
(2<<999).to_s.split('').inject(0){|k,v| k+=v.to_i}
=> 1366
love8909 2008-4-11 21:14
product = 2**1000
sum = 0
while product != 0
sum += product % 10
product /= 10
end
puts sum
idoit 2008-4-20 10:34
学习ing
idoit 2008-4-20 11:13
回复 16# 的帖子
以前做高精度的时候,是用数组存储数,模拟笔算实现的!以下阶乘的c代码实现:
#include "stdio.h"
int n;
int a[2000],b[2000];
void mult(int i,int m)
{
int j;
for(j=1;j<=i;j++)
a[j]=a[j]*m;
for (j=1;j<i+4;j++)
{
a[j+1]+=a[j]/10; a[j]=a[j]%10;
}
}
void prnt(void)
{
int i,j;
for (j=2000;a[j]==0;j--);
for (i=1;i<=j;i++)
{
printf("%1d",a[j-i+1]);
if(i%50 ==0)
printf("\n");
}
printf("\n");
}
main()
{
int i,j;
printf("input n:\n");
scanf("%d",&n);
for(i=2;i<2000;i++)
a[i]=0;
a[1]=1;
j=1;
for(i=2;i<=n;i++)
{
mult(j,i);
for (j=2000;a[j]==0;j--);
}
prnt();
}
[[i] 本帖最后由 idoit 于 2008-4-20 11:15 编辑 [/i]]
liumuqing 2008-4-27 15:57
我来看看
xl19870805 2008-5-2 10:46
dddddddddddddddddddddddddd
雪狼cn 2008-7-11 16:25
回复 2# 的帖子
看看是什么算法。呵呵
雪狼cn 2008-7-11 16:32
跟我的想法一样,这个题目比较好。
neohsiao 2008-7-13 13:50
**** Hidden Message *****
[[i] 本帖最后由 neohsiao 于 2008-7-13 13:51 编辑 [/i]]
kevin 2008-8-13 13:25
学习一下