|
#13 Five Couples
Five married couples will sit around a round table. Although every sitting spot is marked by a name card, they do not notice the cards and sit randomly. Then, they realize that none of them is sitting on the spot marked for them or their spouses.
In how many different ways can this situation occur?
五对夫妇沿着一张圆桌入座。每个座位都有名字,但是他们没有注意到,因此入座是随机的。后来他们注意到没有一个人或者配偶的名字和座号牌能对应得上。
这样的不同情形可能有多少种?
这个题目应该隐含这样的前提:座号牌上的丈夫和妻子是紧挨着的,随机入座时丈夫和妻子也是紧挨着的。
WITH p AS ( ---- 编号并配对
SELECT n1||n2 pair,TRUNC(n1/2) pair_id
FROM (SELECT LEVEL-1 n1 FROM DUAL CONNECT BY LEVEL<=10),(SELECT LEVEL-1 n2 FROM DUAL CONNECT BY LEVEL<=10)
WHERE n1<>n2 AND TRUNC(n1/2)=TRUNC(n2/2)
)
,s (pairs, id) AS ( ---- 五对的所有排列
SELECT CAST(pair AS VARCHAR2(10)),CAST(pair_id AS VARCHAR2(5)) FROM p
UNION ALL
SELECT s.pairs||p.pair,s.id||p.pair_id
FROM p,s
WHERE INSTR(s.id,p.pair_id)=0
)
,t AS (
SELECT DISTINCT SUBSTR(pairs,n)||SUBSTR(pairs,1,n-1) AS pairs ---- 去重复后得到五对排成圆环的所有坐法
FROM (SELECT * FROM s WHERE LENGTH(id)=5) ---- 五对的所有排列
,(SELECT LEVEL n FROM DUAL CONNECT BY LEVEL<=10) ----- 循环挪动10种可能
)
SELECT (SELECT COUNT(*)
FROM t,(SELECT '0123456789' str FROM DUAL) ------ 由于对称关系任取一种作为代表
WHERE SUBSTR(t.pairs,1,1)<>SUBSTR(str,1,1)
AND SUBSTR(t.pairs,2,1)<>SUBSTR(str,2,1)
AND SUBSTR(t.pairs,3,1)<>SUBSTR(str,3,1)
AND SUBSTR(t.pairs,4,1)<>SUBSTR(str,4,1)
AND SUBSTR(t.pairs,5,1)<>SUBSTR(str,5,1)
AND SUBSTR(t.pairs,6,1)<>SUBSTR(str,6,1)
AND SUBSTR(t.pairs,7,1)<>SUBSTR(str,7,1)
AND SUBSTR(t.pairs,8,1)<>SUBSTR(str,8,1)
AND SUBSTR(t.pairs,9,1)<>SUBSTR(str,9,1)
AND SUBSTR(t.pairs,10,1)<>SUBSTR(str,10,1)
)*(SELECT COUNT(*) FROM t) AS cnt
FROM DUAL;
CNT
----------
28085760
数字好像太大了一点,不知道有没有错。
|
|