题解 | 约瑟夫环

约瑟夫环

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();
        boolean []a=new boolean[n];//初始全为假,出局为真
        int num=0;//出局人数
        int x=0;//报数
        while(num<n-1){//当num等于n-2时有n-1个人出局           
            if(!a[k]){
                x++;
                if(x==m){//只有x变化后才进行判定可以减少运算时间
                    a[k]=true;
                    num++;
                    x=0;
                }
            }
            k=(k+1)%n;//每次报数报数的位置向后增加,对总人数取余则确保不会导致数组越界。 
        }
        for(int i=0;i<n;i++)
            if(!a[i]){
                System.out.print(i);
                break;//退出循环减少运算时间
            } 
    }
}

全部评论

相关推荐

肖先生~:那年秋招闯进一位少年,人们都清楚:成功对他来说只是时间问题
点赞 评论 收藏
分享
10-19 14:15
兰州大学 Java
_Philia093:蓝桥杯省三删掉
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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