某天晚上有A、B、C、D四個人要通過一座橋,他們只有一個手電筒,每次過橋都需要手電筒照明,橋上每次最多可同時過兩個人,他們全部從一邊到達橋另一邊有多少種方案。請用一條sql完成并輸出所有方案(列出每個方案中每個人過橋次數)。
答案示例:
A B C D
1 2 3 4
有沒有大神會的
uj5u.com熱心網友回復:
SQL> with m as (
2 select 'A' n from dual union all
3 select 'B' n from dual union all
4 select 'C' n from dual union all
5 select 'D' n from dual
6 )
7 select m1.n n1, m2.n n2, m3.n n3, m4.n n4
8 from m m1, m m2, m m3, m m4
9 where regexp_count(m1.n || m2.n || m3.n || m4.n, 'A') = 1
10 and regexp_count(m1.n || m2.n || m3.n || m4.n, 'B') = 1
11 and regexp_count(m1.n || m2.n || m3.n || m4.n, 'C') = 1
12 and regexp_count(m1.n || m2.n || m3.n || m4.n, 'D') = 1;
N1 N2 N3 N4
-- -- -- --
A B C D
A B D C
A C B D
A C D B
A D B C
A D C B
B A C D
B A D C
B C A D
B C D A
B D A C
B D C A
C A B D
C A D B
C B A D
C B D A
C D A B
C D B A
D A B C
D A C B
D B A C
D B C A
D C A B
D C B A
24 rows selected
SQL>
uj5u.com熱心網友回復:
肯定要限制以最少次數過橋,不然就無窮解了,應該是3去(2人),2回(1人來接),一共最少過橋3*2+2=8次
也就是要滿足下面條件的就是解,
1、每人至少過橋1次
2、每人過橋奇數次(偶數就回來了)
3、總和是8次(個人最大5次)
with tab as (select 1 as n from dual union all select 3 from dual union all select 5 from dual)
select a.n as a,b.n as b,c.n as c,d.n as d
from tab a,tab b,tab c,tab d
where a.n + b.n + c.n + d.n = 8
A B C D
1 1 1 5
1 1 3 3
1 1 5 1
1 3 1 3
1 3 3 1
1 5 1 1
3 1 1 3
3 1 3 1
3 3 1 1
5 1 1 1
uj5u.com熱心網友回復:
感謝樓上的回答
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/100778.html
標籤:基礎和管理
