|
solomon_007 发表于 2015-9-17 13:37 ![]()
前面有一行 4,2,2 写错了,应该是 4,2,4
SQL> with t as (select level-1 n from dual connect by level
给你发个章,要哪个?
我的思路和你一样,经过分析后C只能够是4位。我先求出所有四位以下的数,用BITAND判断是否有重复。
WITH d AS (SELECT LEVEL-1 d,POWER(2,LEVEL-1) bit FROM DUAL CONNECT BY LEVEL<=10)
,num(len,n,bit) AS (
SELECT 1,d ,bit FROM d WHERE d<>0
UNION ALL
SELECT len+1,to_number(n||d),num.bit+d.bit FROM num,d WHERE BITAND(num.bit,d.bit)=0 AND len<4
)
,d2 AS (SELECT n,bit FROM num WHERE len=2)
,d3 AS (SELECT n,bit FROM num WHERE len=3)
,d4 AS (SELECT n,bit FROM num WHERE len=4)
SELECT a.n a,b.n b,c.n c FROM d3 a,d3 b,d4 c WHERE a.n<b.n AND a.n+b.n=c.n AND BITAND(a.bit,b.bit)=0 AND BITAND(a.bit+b.bit,c.bit)=0
UNION ALL
SELECT a.n a,b.n b,c.n c FROM d2 a,d4 b,d4 c WHERE a.n+b.n=c.n AND BITAND(a.bit,b.bit)=0 AND BITAND(a.bit+b.bit,c.bit)=0
ORDER BY c;
.........
74 5938 6012
34 5978 6012
38 5974 6012
87 5934 6021
84 5937 6021
78 5943 6021
73 5948 6021
48 5973 6021
37 5984 6021
43 5978 6021
34 5987 6021
84 rows selected.
Elapsed: 00:00:00.44
|
|