|
lugionline 发表于 2013-8-17 08:54 ![]()
大家的做法肯定都差不多
with
用两位二进制来充当计数器的方法很新颖!我试过十进制,但十进制没有位操作,要用其他办法实现。
改成ORACLE语法:
with
d (n, m, c) as
(
select 0, power(4, 0) * 3, power(4, 0) * 1 FROM DUAL union all
select n + 1, power(4, n + 1) * 3, power(4, n + 1) * 1 from d where n < 9
),
s (x, c, p1, p2, p3, p4, l) as
(
select cast(d.n as varchar2(20)), d.c, 0, 0, 0, d.n, 1 from d where n > 0 union all
select s.x || d.n , s.c + d.c, s.p2, s.p3, s.p4, d.n, s.l + 1 from s, d
where ( BITAND(d.m, (s.c + d.c))) < d.m
and (s.l + 1 < 4 or (s.p2 + s.p3 + s.p4 + d.n) in (select n*n from d))
)
select x from
(
select x, rank() over (order by l desc) r from s
) s where r = 1
我刚刚发现图书章不可转让,那就有劳你把书名和联系办法告诉童馨,或者告诉我也行。
|
|