假若有A,B,C,D,E,F,G,H8个数,取任意6个数做一个组合,则共有262144个组合。



现在我要把这些组合里,单个组合里有3个或3个以上同样字母的组合排除掉,那么还剩下多少个组合?具体怎么运算呢?



然后,我想知道剩下的组合里有多少个是以AB开头的?怎么运算?我想把最终这些组合列出来,用R怎么写呢?



谢谢大家的帮助!
我先贴一个最笨的实现办法,其他人看看有没有更简单的:


<br />
x <- LETTERS[1:8]<br />
y <- expand.grid(x, x, x, x, x, x) # 得到所有排列(262144)<br />
<br />
z <- apply(y, 1, function(r) max(table(r)))<br />
nrow(y[z < 3,]) # 去掉3个或3个以上同样字母的排列,得到结果:201600<br />
<br />
y[(z < 3) & (y[,1] == 'A') & (y[,2] == 'B'),] # 剩下的组合里以AB开头的,同样可以用 nrow 得到个数(3282)<br />




不过这种办法在计算 table 时还真是很慢,在我电脑上花了将近两分钟。
谢谢,我又做了些条件限制,把组合个数减少到了120个  :)

这样恢复我密码的可能性就大大提高了。
你还有更好的办法?我把密码忘的一干二净,
你的整个题目是错误的,排列?组合?
我也是看了她给的 262144(= 8 ^ 6),加上后面提到的“3个或3个以上同样字母”,才知道其实是有放回的排列。估计跟我一样同属于统计盲,所以把术语用错了。

现在的问题,不光考概率或计算机,还考推理和想象力呢。
:) 我确实是个统计盲,还好密码于今早已经想起来了。是我工资卡的密码,在某天取完钱后脑袋发胀任意改了个不常用的密码,结果忘得一干二净。



这种情况银行可以按挂失处理,但我觉得不应该,自己忘记的事情还得由自己想起来。



看来我必须得恶补统计了  :)