我想在一条线上排列3个红球,2个蓝色球和2个绿球,这样就不会有两个相同颜色的球相邻.如果没有这样的限制,那么这种独特安排的数量是多少
下面是我用来解决这个问题的R中的代码.我们的想法是获得所有210个独特的排列,然后计算连续两个相邻单元格具有相同颜色的情况.使用这个算法,我得到38作为答案.我觉得我的代码是如此丑陋的黑客.你会如何用R(或你的首选语言)做到这一点?
colors <- c("R", "R", "R", "B", "B", "G", "G")
n <- 1:10000
x <- matrix(rep(NA, times=70000), ncol=7)
for (i in n) x[i,] <- sample(colors)
x <- unique(x)
rows <- nrow(x)
y <- rep(NA, times =rows)
for (i in 1:rows) {
y[i] <- x[i,1]==x[i,2] |
x[i,2]==x[i,3] |
x[i,3]==x[i,4] |
x[i,4]==x[i,5] |
x[i,5]==x[i,6] |
x[i,6] == x[i,7]
}
table(y)
## y
## FALSE TRUE
## 38 172
Run Code Online (Sandbox Code Playgroud)
这应该以更简单的格式为您提供相同的值:
library(DescTools)
library(Hmisc)
out = Permn(colors)
table(apply(out,1,function(x) any(x==Lag(x))))
Run Code Online (Sandbox Code Playgroud)