|
|
131楼在1,4,5,6出不了结果,原来以为是误差的原因,其实是少了减法和除法的对调。修改:
WITH NUM1 AS(
SELECT DECODE (E.O,
'+',A.N+B.N,
'-',A.N-B.N,
'*',A.N*B.N,
'/',A.N/B.N
) AS N1
,C.N N2
,D.N N3
,'('||A.N||E.O||B.N||')' S
FROM T24 A,T24 B,T24 C,T24 D ,O24 E
WHERE A.N NOT IN (B.N,C.N,D.N)
AND B.N NOT IN (C.N,D.N)
AND C.N <> D.N),
-----1111模式
NUM2 AS(
SELECT DECODE(E.O,
'+',N1+N2,
'-',N1-N2,
'*',N1*N2,
'/',N1/N2
) AS M3
,N3 M4
,'('||S||E.O||N2||')' M5
,TO_CHAR(N3) M6
FROM NUM1,O24 E
UNION ALL---11*11模式
SELECT DECODE(E.O,
'+',N3+N2,
'-',N3-N2,
'*',N3*N2,
'/',N3/N2
) AS M3
,N1 M4
,'('||N3||E.O||N2||')' M5
,S M6
FROM NUM1,O24 E
UNION ALL
SELECT DECODE(E.O,
'-',N2-N1,
'/',N2/N1
) AS M3
,N3 M4
,'('||N2||E.O||S||')' M5
,TO_CHAR(N3) M6
FROM NUM1,O24 E
WHERE E.O IN ('-','/') AND (N1<>0 OR E.O='-')
),
NUM3 AS(
SELECT DECODE(E.O,
'+',M3+M4,
'-1',M3-M4,
'*',M3*M4,
'/',M3/M4
) AS TOTAL
,M5||E.O||M6 TS
FROM NUM2,O24 E
UNION ALL
SELECT DECODE(E.O,
'-1',M4-M3,
'/',M4/M3
) AS TOTAL
,M6||E.O||M5 TS
FROM NUM2,O24 E
WHERE E.O IN ('-','/') AND (M3<>0 OR E.O='-')
)
SELECT * FROM NUM3 WHERE TOTAL=24;
24 6/((5/4)-1)
24 4/(1-(5/6)) |
|