题解 | 约瑟夫环

约瑟夫环

https://www.nowcoder.com/practice/e417cfe32c74416ca38247f619ddb322

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n=in.nextInt(), k=in.nextInt(), m=in.nextInt();
		int x=0;//当只有一个人时,有且只有0号胜出
		//由于约瑟夫环问题没有通项公式只有递归公式
		//for循环相当于递归公式由低到高一一往后推导
        for(int i=2/*从有两个人开始*/;i<=n/*到最后一个人被淘汰截止*/;i++){
            x=(x+m/*m表示在x的基础下数m个数*/)%i;
		  //对i取余表示在有i人参与的情况下最后一个被淘汰的人的位置
	  }
        x=(x+k)%n;//将初始位置加到最后一个人的位置上并对总人数n取余防止超出范围
        System.out.print(x);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务