package main
import "fmt"
// 最后剩下的人
// 编号是 1~ n,每次数m,数到m删除
func josephus(n, m int) int {
p := 0
for i := 1; i <= n; i++ {
p = (p + m) % i
}
return p + 1
}
// 依次输出删除的人
func josephus2(n, m int) {
res := make([]int, n+1)
cnt := 0 // 删除的个数
k := 0 // 计数,每次到m就开始删除
i := 0 // 编号
for cnt != n {
i++
if i > n {
i = 1 // 循环
}
if res[i] == 0 {
k++
if k == m {
res[i] = 1
cnt++
k = 0
fmt.Printf("%d ", i)
}
}
}
}
func main() {
res := josephus(10, 3)
fmt.Println(res)
}