My Solution to Project Euler in Ruby

Problem 11

求横、竖、对角方向上连续四个数乘积的最大值。

暴力解,没什么技术含量。

Problem 18

简单的动态规划。同样的题还有Problem 67。

Problem 22

先排序,再算score。

Problem 26

找循环节。本来是我最得意的一题,看了别人的解答以后,狂汗!

由于是模d,所以1/d 的循环节最多不超过d 位(鸽笼原理)。

 

看高手是怎么做的!

 

稍稍解释一下/1 的意思,这是一个回溯引用,引用前面划分出来的那个子表达式(/w+?)。/1 表示引用模式里的第一个子表达式,/2 代表第二个,/3 代表第三个 ……

 

Problem 29

算不同的幂的个数。

Problem 40

这里

Problem 42

 

Problem 43

先写了一个ugly 版本:

 

后来实在看不下去了,写了一个递归版本,但不知道怎么把结果累加起来,只好用了全局变量-_-!!

 

Problem 44

 

这个程序的最大问题就是你必须先蒙一个范围,比如2000。

一个叫dfg59 的哥们这样写道:

 

Problem 46

 

Problem 47

记得mathn 库有个叫prime_division() 的函数,可以把自然是分解成素因子的幂的积的形式(当然,是用数组表示的)。

 

会不会太简单了!自己写一个prime_division():

 

嗯,速度还行,花了31.75秒。

看后面的论坛,看到了一位老兄四行搞定:

 

Problem 49

为什么又是3330呢?巧合??

 

Problem 50

第50题想了好久,一开始随手写了一个遍历所有可能的算法,跑了一晚也没算出来。后来重读了一遍题目,一想,既然是找最大的,何不从最长的区间开始搜呢。结果只花了不到4秒就算出来了,997651。算法的威力啊!!!
筛法是抄Bob大叔的

固定区间长度,先找到最靠右、其和又没超过1,000,000的区间,不断左移。只要找到,它一定是最长最大的。

Problem 67

和Problem 18 一个味。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值