面试题约瑟夫: n个人围成一圈,报到m的人出列


有N个人围成一圈,第一个人从1开始报数,报到M的人出列,求最后一个出列的人。
java实现的:

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        queue(10, 3);
    }

    private static void queue(int total, int num) {
        // TODO Auto-generated method stub
        //定义一个数组,true表示没有出列的,false表示已经出队列的
        boolean []arr = new boolean[total];
        Arrays.fill(arr, true);
        
        //移动变量,如1 2 3
        int next= 0;
        
        //数组下标
        int index = 0;
        
        //剩下的人数
        int remain = total;
        
        //如果剩下的人为1时,停止报数
        while(remain > 1) {
            for(index = 0; index < total; index++){
            if (arr[index] == true) {
                next++; //自增到规定的出列数num
                if(next == num ) {
                    arr[index] = false;
                    remain--;
                    System.out.println("依次出列的人数为:" + (index + 1));
                    next = 0; //当数到规定的数是,从0开始数
                } 
            }
        }
        }
        for (int i = 0; i < total; i++){
            if (arr[i] == true) {
                System.out.println("最后剩下的人是:"  + (i + 1));
                break;
            }
        }
    
        
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 好久没有看有关算法的问题了,今天废了不少劲,再感叹一句:要想学好算法就要常练习,没什么捷径可走。废话不多说,如下:...
    时间已静止阅读 11,799评论 0 11
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 10,542评论 0 41
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 5,969评论 0 2
  • 二零一七年十一月十一日 星期六 多云 无数次觉得,小说应该在深夜半昧的台灯下阅读,写小说的人,一定也喜欢在夜间大...
    华盖之下阅读 3,744评论 0 1
  • 卸下所有透亮的伪装 展露无遗 清水下渴死的鱼 相濡以沫 默默葬爱 你说独偏爱我一人 流星雨前许个愿 最真的是我的...
    晚韵阅读 3,169评论 1 0

友情链接更多精彩内容