跳转至

JZ62 孩子们的游戏 圆圈中最后剩下的数

题目描述

让小朋友们围成一个大圈。然后,随机指定一个数 m,让编号为 0 的小朋友开始报数。每次喊到 m-1 的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续 0...m-1 报数 .... 这样下去 .... 直到剩下最后一个小朋友,可以不用表演。

解题思路

约瑟夫环,圆圈长度为 n 的解可以看成长度为 n-1 的解再加上报数的长度 m。因为是圆圈,所以最后需要对 n 取余。

package main

import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param n int整型
 * @param m int整型
 * @return int整型
 */
func LastRemaining_Solution(n int, m int) int {
    // write code here
    // 不满足的条件
    if n <= 0 || m <= 0 {
        return -1
    }
    if n == 1 {
        return 0
    } else {
        return (LastRemaining_Solution(n-1, m) + m) % n
    }
}

func main() {
    fmt.Printf("%d\n", LastRemaining_Solution(5, 3))

}