楼主: 〇〇

[转载] Project Euler解题汇总(更新至309在1楼)

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
21#
发表于 2010-11-5 01:46 | 只看该作者
我要求把:N=5也作为变量。
'0'的特性可以用,像96983这类不能用。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
22#
发表于 2010-11-5 02:09 | 只看该作者
原帖由 newkid 于 10-11-5 01:46 发表
我要求把:N=5也作为变量。
'0'的特性可以用,像96983这类不能用。

N不能超过相邻两个0之间的距离的最大值,N过大反而没意义

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
23#
发表于 2010-11-5 02:30 | 只看该作者
原帖由 lastwinner 于 2010-11-5 02:09 发表

N不能超过相邻两个0之间的距离的最大值,N过大反而没意义

不对吧?假如串里面有两个0相连,那么N=2就不行了?N又不一定会覆盖到0.

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
24#
发表于 2010-11-5 02:39 | 只看该作者
原帖由 newkid 于 10-11-5 02:30 发表

不对吧?假如串里面有两个0相连,那么N=2就不行了?N又不一定会覆盖到0.



意思是从第一个0到最后一个0,中间可能出现很多0
前一个0到后一个0,中间间隔X位数
N要是大于最大的X,那结果就一定为0了
({X}包括开头到第一个0之间的位数以及最后一个0到结尾的位数)

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
25#
发表于 2010-11-5 02:40 | 只看该作者
1-20公倍数:递归就是好就是好!

WITH n AS (
SELECT LEVEL n FROM DUAL WHERE LEVEL>1 CONNECT BY LEVEL<=20
)
,p AS (SELECT * FROM n
       MINUS
       SELECT n1.n * n2.n
         FROM n n1, n n2
       WHERE n1.n <= n2.n
     )
,t(n,p,n_left,path) AS (
SELECT n.n,p.n,n.n/p.n,'/'||TO_CHAR(p.n) FROM n,p WHERE MOD(n.n,p.n)=0
UNION ALL
SELECT t.n,p.n,t.n_left/p.n,t.path||'/'||TO_CHAR(p.n)
  FROM t,p
WHERE t.n_left>1 AND MOD(t.n_left,p.n)=0 AND t.p<=p.n
)
,t2 AS (
SELECT t.*
  FROM t,(SELECT * FROM t WHERE n_left=1) t1
WHERE t1.path||'/' LIKE t.path||'/%' AND t.n=t1.n
)
SELECT EXP(SUM(LN(POWER(p,MAX(cnt)))))
  FROM (SELECT p,COUNT(*) cnt
          FROM t2
         GROUP BY n,p
        )
GROUP BY p;

232792560

MODEL留给OO去做,他最近进步很大。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
26#
发表于 2010-11-5 02:53 | 只看该作者
借用一下:


with src as (select '73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450' xx from dual),
s as (select regexp_replace(xx,'[^0-9]','') x from src),
sp as (select rownum rn , substr(x, rownum, :n) num from s connect by rownum<=length(x)-:n-1)
SELECT * FROM (
SELECT rn,num,EXP(SUM(LN(SUBSTR(num,l,1)))) prod,RANK() OVER(ORDER BY EXP(SUM(LN(SUBSTR(num,l,1)))) DESC) rnk
  FROM sp,(SELECT LEVEL L FROM DUAL CONNECT BY LEVEL<=:N)
WHERE INSTR(num,'0')=0
GROUP BY rn,num
)
WHERE rnk=1;


        RN
----------
NUM
------------------------------
      PROD        RNK
---------- ----------
       365
99879
     40824          1

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
27#
 楼主| 发表于 2010-11-5 08:42 | 只看该作者
原帖由 lastwinner 于 2010-11-5 01:27 发表


最后部分可以用reverse函数简化的
另外根据乘法交换律,完全可以认为 b.x>=c.x
而且可以从数字特征去优化算法
比如9只可能由3×3或者1×9得到,8只能是1×8或者2×4,7只能是1×7                  ——略有成效

   select max(a.x) from (select b.x*c.x x from
(select level+100 x from dual connect by level 100000 and substr(a.x,1,3)=reverse(substr(a.x,4));


优先搜索7、8、9为尾数的(说明首位也是7、8、9),找不到再找下面的               
而首位为7的6位数,如果是由两个三位数的乘积构成的,那这个三位数一定不小于700  ——此举大大降低了无谓的劳动

   select max(a.x) from (select b.x*c.x x from
(select level+700 x from dual connect by level 100000 and substr(a.x,1,3)=reverse(substr(a.x,4));


sql无法提前退出查找

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
28#
 楼主| 发表于 2010-11-5 08:49 | 只看该作者
原帖由 newkid 于 2010-11-5 02:53 发表
借用一下:


with src as (select '73167176531330624919225119674426574742355349194934
。。。。。
71636269561882670428252483600823257530420752963450' xx from dual),
s as (select regexp_replace(xx,'[^0-9]','') x from src),
sp as (select rownum rn , substr(x, rownum, :n) num from s connect by rownum

用log积化和就是好

使用道具 举报

回复
论坛徽章:
407
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
29#
 楼主| 发表于 2010-11-5 09:11 | 只看该作者
原帖由 newkid 于 2010-11-5 02:53 发表
借用一下:


with src as (select '73167176531330624919225119674426574742355349194934
。。。
71636269561882670428252483600823257530420752963450' xx from dual),
s as (select regexp_replace(xx,'[^0-9]','') x from src),
sp as (select rownum rn , substr(x, rownum, :n) num from s connect by rownum

再次修改一下,要求出最大的连续积及这些连续数字是什么

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
30#
发表于 2010-11-5 11:45 | 只看该作者
原帖由 〇〇 于 10-11-5 09:11 发表

再次修改一下,要求出最大的连续积及这些连续数字是什么



这样子这题目将会很难,支持

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表