1 package day_2;
 2
 3 import java.util.Scanner;
 4
 5 /**
 6  * @author Administrator
 7  *  约瑟夫环问题:  设编号为 1,2,3,....n的N个人围坐一圈,约定编号为k(1<=k<=n)
 8  *  的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次
 9  *  类推,直到所有人出列为止,由此产生一个出队编号的序列。
10  *  方法一:数组取模法、(模拟)
11  */
12
13 public class Demo_1 {
14     public static void main(String args [])
15     {
16       int n,m;
17       Scanner cin;
18       while(true)
19       {
20           cin = new Scanner(System.in);
21           n=cin.nextInt();
22           m=cin.nextInt();
23           if( 0==n+m ) break;
24            fun_2(n,m);
25       }
26        // cin.close();
27        }
28     //方法一: 数组模拟
29  static void fun_1(int n ,int m){
30         boolean [] arr = new boolean [n+1];
31         for(int i=0;i<=n;i++)
32              arr[i]=true;
33         //双亲数组法
34          int  pos=1;
35          m--;
36        while(true){
37           int cnt=pos;
38           while(!arr[(pos+m)%(n+1)==0?1:(pos+m)%(n+1)]){
39                   ++pos;
40           if(pos-cnt>=n)    return ;
41           }
42           pos=(pos+m)%(n+1)==0?1:(pos+m)%(n+1);
43            arr[pos]=false;
44           System.out.println(pos);
45           ++pos;
46        }
47     }
48
49  /**
50  *  方法二: 循环链表模拟
51  */
52 static void fun_2(int n , int m){
53     class child{
54         int id ;
55         child  next ;
56         public child(){};
57         int getId() {
58             return id;
59         }
60         child getNext() {
61             return next;
62         }
63     } ;
64
65   //模拟c循环链表
66    child head,a;
67     a = new child() ;
68     a.id = 1 ;
69     head = a ;
70     for(int i=2 ; i<=n ; i++ ){
71          child b = new child() ;
72             b.id = i ;
73          head.next = b ;
74         head = b ;
75     }
76       head.next = a;
77     while(a!=a.next){
78         child b=head.next;
79       for(int i=1; i<m ;i++ ){
80           b=a;
81           a=a.next;
82       }
83      System.out.println(a.id);
84           a=a.next;
85           b.next=a;
86           System.gc();
87     }
88     if(m>1) System.out.println(a.id);
89 }
90 }

转载于:https://www.cnblogs.com/gongxijun/p/4107691.html

Java学习之约瑟夫环的两中处理方法相关推荐

  1. 约瑟夫环的两种实现方法

    已知一组编号分别是:4,7,5,9,3,2,6,1,8,按照约瑟夫环原理打印出队列. 举例说明约瑟夫原理: (1)设定一个报数值,如:3,从1开始报数,报到3的时候将对应的数据删除. (2)然后继续从 ...

  2. 代码验证约瑟夫环百科词条中的故事(Python)——约瑟夫斯的故事、数学家加帕斯讲的故事,体验算法模板的奇妙。

    [点击此处跳转笔记正文] Python 官网:https://www.python.org/ Free:大咖免费"圣经"教程< python 完全自学教程>,不仅仅是基 ...

  3. java约瑟夫环迭代器_Josephus约瑟夫环问题的不同实现方法与总结

    /************************************************************************/ /*                  Josep ...

  4. Java实现Josephus约瑟夫环问题的算法

    Java实现Josephus约瑟夫环问题的算法 前言 语言:Java 环境:IntelliJ IDEA JDK版本:1.8 源码:GitHub 问题概述 N个人围成一圈,规定报数为M,第一个人从1开始 ...

  5. IOS学习之UISwitch控件两种使用方法和监听

    IOS学习之UISwitch控件两种使用方法和监听 分类: IOS开发入门2012-06-15 11:48 1363人阅读 评论(0) 收藏 举报 一.第一种创建UISwitch控件的方法,在代码中动 ...

  6. java学习day40(Spring)spring中的aop和基于XML以及注解的AOP配置

    第1章 AOP 的相关概念[理解] 1.1AOP 概述 1.1.1 什么是 AOP AOP :全称是 Aspect Oriented Programming 即:面向切面编程. 简单的说它就是把我们程 ...

  7. java语言的多态性及特点_Java中的方法的多态性有两种形式:( )和( )。_学小易找答案...

    [填空题]已知函数 ,则微分 . [填空题]. [单选题]71.用转动小滑板法车圆锥时产生( )误差的原因是小滑板转动角度计算错误. [单选题] [填空题]Java中的方法的多态性有两种形式:( )和 ...

  8. 约瑟夫环 java代码_约瑟夫环算法的Java实现代码

    相信大家都知道这是一个的算法问题,约瑟夫环的c语言实现是利用了指针链表的形式,java实现呢,我的这个是用了内部类. 算法描述:n个人围成一圈,每人有一个各不相同的编号,选择一个人作为起点,然后顺时针 ...

  9. java 单链表约瑟夫环_java循环单链表实现约瑟夫环问题

    package SingleLinkList; //节点类 class Node{ private int data; private Node next; public int getData() ...

最新文章

  1. CCF NOI1063 计算组合数
  2. 又一Attention函数诞生啦,带给你意想不到的巨大提升!
  3. springboot环境搭建及入门必知
  4. 郑州升达经贸管理学院计算机科学与技术,郑州升达经贸管理学院计算机科学与技术专业2016年在福建理科高考录取最低分数线...
  5. [渝粤教育] 四川农业大学 宏观经济学 参考 资料
  6. pika集群水平扩展——让性能容量不再受限
  7. python 命令行解析模块_Python解析命令行读取参数 -- argparse模块
  8. 如何看懂一个c语言项目,初学者怎样看懂代码 学习代码编程的注意事项
  9. 【时间序列分析】14.平稳序列的参数估计与白噪声检验
  10. pytorch1.10新功能inference_mode
  11. 教你如何进入有密码的 XP 系统
  12. 大数据可视化(七)复杂数据可视化
  13. matplotlib总结
  14. 电路板Layout爬电距离、电气间隙的确定
  15. 全国计算机一级考试介绍难不难,计算机一级难不难?有什么考试技巧?
  16. Python爬虫新手进阶版:怎样读取非结构化网页、图像、视频、语音数据
  17. 互联网人如何拓展自己的人脉
  18. swftools将PDF转成swf (含中文的pdf注意事项)
  19. HTML复选框里添加下拉框,Html:实现带复选框的下拉框(一)
  20. 智能视频分析技术及应用扫盲

热门文章

  1. 手机移动防卫盾安全需求分析文档
  2. java替换html中的样式
  3. 朴素贝叶斯原理及实现
  4. log4j配置文件及nutch中的日志配置
  5. 第02课:简单好用的中文分词利器 jieba 和 HanLP
  6. 避免在循环体中声明创建对象
  7. leetcode-python-优先级队列与时间复杂度
  8. 48-如何实现unix2dos功能
  9. C++ inline variable
  10. 针对十类数据从业人员,最好的工具推荐