为10支球队和6轮

时间:2017-09-22 05:14:16

标签: r excel

我有10支球队,我想举办一场活动让他们在比赛中战斗。

  • 小组参加6轮比赛
  • 每轮比赛5对
  • 仅限唯一对

我可以在Excel或R中执行此操作吗?

1 个答案:

答案 0 :(得分:3)

您需要应用的是循环赛锦标赛的算法排程。算法(元素旋转)的解释非常简单,可以找到here。总结一下,有14个团队,我们按矩阵排列它们。

enter image description here

然后算法进行特定旋转,将第一个元素保持在同一位置: enter image description here

enter image description here

以下是使用R完成的复制解决方案。以下示例适用于所有组合,但您可以根据自己的需要进行自定义(n = 10,r = 13)或运行所有轮次并随机提取6轮

library(dplyr)
n <- 14
teams <- 1:n
r <- 13


rounds <- list()
for( i in 1:r){
  round <- 
    data.frame(
      round = i,
      team1 = teams[1:(n/2)], 
      team2 = rev(teams)[1:(n/2)])
  rounds[[i]] <- round
  teams <- c( teams[1],  last(teams), head(teams[-1],-1) ) 
}

rr <- bind_rows(rounds)
head(rr)

# round team1 team2
# 1     1     1    14
# 2     1     2    13
# 3     1     3    12
# 4     1     4    11
# 5     1     5    10
# 6     1     6     9

享受!