|
原帖由 nlrte13 于 10-10-28 15:06 发表 ![]()
哈哈,过奖过奖~
这个题我算的结果是50988,又和你不一样了
方法是:
[ 7! - C(1,5)*6! + C(2,5)*5! - C(3,5)*4! + C(4,5)*3! - C(5,5)*2! ] * C(2,7)
= ( 5040 - 3600 + 1200 - 240 + 30 - 2 ) * 21
= 2428 * 21
= 50988
你的算法解释一下?
一加一减看着倒是像是那么一回事儿,不过我不了解其中的算法缘由
如果是我,我会这么考虑:(问题简化成abcd重新排列后每个字母所在位置都与原字母不重合)
则第一个位置可能的选择是:C(1,3)
第二个位置可能的选择是:(C(1,3)*1/3+C(1,2)*2/3) --表示如果第一个位置恰好选择的是b,则第二个位置就可以从剩下的3个字母中任选一个;如果不是b,则可选字母就只有2个了
第三个位置可能的选择是:
如果第前两个中有选到c和d,概率是2/P(2,4)=2/12,则第三个位置可能的选择就是C(1,2)
如果第前两个中有选到c而没有d或者有d而没有c,概率是8/12,则第三个位置可能的选择就是C(1,1)
如果第前两个中没选到c也没选d,概率是2/12,则第三个位置可能的选择就是C(1,1)
…………………………………………
然后我就晕了@@@@@@@@@@@
这是我的sql解答
SCOTT@lw.lw> select count(*) xp from (SELECT ROWNUM id, decode(rownum,8,2,9,8,ro
wnum) rn FROM DUAL CONNECT BY ROWNUM<=9) where level=9 start with id>1 connect b
y nocycle (level<>rn and level<=7 or level=8 and rn<>2 or level=9 and rn<8) and
id<>prior id;
XP
----------
101976
已用时间: 00: 00: 05.31
正好是你的2倍
个数虽然不会是newkid算的那么多,但也不至于是你算的这么少吧? |
|