- 注册时间
- 2009-7-21
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 4489
- 在线时间
- 小时
|
楼主 |
发表于 2010-6-16 07:28:51
|
显示全部楼层
newkid的递归解法,比c还快。-
- WITH n AS (
- SELECT ROWNUM n FROM DUAL CONNECT BY ROWNUM<=15
- )
- ,t (n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,lvl,roundup) AS (
- SELECT n,0,0,0,0,0,0,0,0,0,0,0,1,0
- FROM n
- WHERE n<8
- UNION ALL
- SELECT t.n1
- ,DECODE(t.lvl,1 ,n.n,t.n2 )
- ,DECODE(t.lvl,2 ,n.n,t.n3 )
- ,DECODE(t.lvl,3 ,n.n,t.n4 )
- ,DECODE(t.lvl,4 ,n.n,t.n5 )
- ,DECODE(t.lvl,5 ,n.n,t.n6 )
- ,DECODE(t.lvl,6 ,n.n,t.n7 )
- ,DECODE(t.lvl,7 ,n.n,t.n8 )
- ,DECODE(t.lvl,8 ,n.n,t.n9 )
- ,DECODE(t.lvl,9 ,n.n,t.n10)
- ,DECODE(t.lvl,10,n.n,t.n11)
- ,DECODE(t.lvl,11,n.n,t.n12)
- ,t.lvl+1
- ,CASE t.lvl
- WHEN 5 THEN FLOOR((t.n4 +t.n5 )/16)
- WHEN 8 THEN FLOOR((t.n7 +t.n8 +t.roundup)/16)
- WHEN 11 THEN FLOOR((t.n10+t.n11+t.roundup)/16)
- ELSE t.roundup
- END
- FROM t,n
- WHERE n.n NOT IN (n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11)
- AND (t.lvl IN (3,6,9)
- OR (t.lvl=11 AND n.n = MOD(t.n10+t.n11+t.roundup,16) AND t.n3=t.n1+t.n2+FLOOR((t.n10+t.n11)/16))
- OR (t.lvl=10 AND n.n>t.n10)
- OR (t.lvl=8 AND n.n = MOD(t.n7+t.n8+t.roundup,16))
- OR (t.lvl=7 AND n.n>t.n7)
- OR (t.lvl=5 AND n.n = MOD(t.n4+ t.n5,16))
- OR (t.lvl=4 AND n.n>t.n4)
- OR (t.lvl=2 AND n.n - t.n1- t.n2 IN (0,1))
- OR (t.lvl=1 AND n.n>t.n1 AND n.n+t.n1<=15)
- )
- )
- SELECT count(TO_CHAR(n1,'X') ||TO_CHAR(n10,'X')||TO_CHAR(n7,'X')||TO_CHAR(n4,'X')
- ||' + '
- ||TO_CHAR(n2,'X')||TO_CHAR(n11,'X')||TO_CHAR(n8,'X')||TO_CHAR(n5,'X')
- ||' = '
- ||TO_CHAR(n3,'X')||TO_CHAR(n12,'X')||TO_CHAR(n9,'X')||TO_CHAR(n6,'X')) ------ 位数对调的其他组合略
- FROM t
- WHERE lvl=12
- ;
- COUNT(*)*8
- ----------
- 3408
-
- 已用时间: 00: 00: 01.35
复制代码 |
|