SQL> with t as (
2 select
3 substr(str,instr(str,'/',1, 1)+1,instr(str,'/',1, 2)-instr(str,'/',1, 1) -1) c11,
4 substr(str,instr(str,'/',1, 2)+1,instr(str,'/',1, 3)-instr(str,'/',1, 2) -1) c12,
5 substr(str,instr(str,'/',1, 3)+1,instr(str,'/',1, 4)-instr(str,'/',1, 3) -1) c13,
6 substr(str,instr(str,'/',1, 4)+1,instr(str,'/',1, 5)-instr(str,'/',1, 4) -1) c21,
7 substr(str,instr(str,'/',1, 5)+1,instr(str,'/',1, 6)-instr(str,'/',1, 5) -1) c22,
8 substr(str,instr(str,'/',1, 6)+1,instr(str,'/',1, 7)-instr(str,'/',1, 6) -1) c23,
9 substr(str,instr(str,'/',1, 7)+1,instr(str,'/',1, 8)-instr(str,'/',1, 7) -1) c31,
10 substr(str,instr(str,'/',1, 8)+1,instr(str,'/',1, 9)-instr(str,'/',1, 8) -1) c32,
11 substr(str,instr(str,'/',1, 9)+1,instr(str,'/',1,10)-instr(str,'/',1, 9) -1) c33
12 from (
13 select sys_connect_by_path(rn,'/')||'/' str
14 from (select rownum rn from dual connect by level <=9)
15 where level=9
16 connect by nocycle rn <> prior rn
17 )
18 )
19 select *
20 from t
21 where c11 + c12 + c13 = c21 + c22 + c23
22 and c11 + c12 + c13 = c31 + c32 + c33
23 and c11 + c12 + c13 = c11 + c21 + c31
24 and c11 + c12 + c13 = c12 + c22 + c32
25 and c11 + c12 + c13 = c13 + c23 + c33
26 and c11 + c12 + c13 = c11 + c22 + c33
27 and c11 + c12 + c13 = c31 + c22 + c13
28 /
C11 C12 C13 C21 C22 C23 C31 C32 C33
--- --- --- --- --- --- --- --- ---
2 7 6 9 5 1 4 3 8
2 9 4 7 5 3 6 1 8
4 3 8 9 5 1 2 7 6
4 9 2 3 5 7 8 1 6
6 1 8 7 5 3 2 9 4
6 7 2 1 5 9 8 3 4
8 1 6 3 5 7 4 9 2
8 3 4 1 5 9 6 7 2
我上面的方法只能找3阶幻方,4阶 16! 这个太大了,跑不出来。。。 |