Java学习之约瑟夫环的两中处理方法
时间:2022-05-05
本文章向大家介绍Java学习之约瑟夫环的两中处理方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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 }
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- SpringCloud2020 学习笔记(七)cloud-eureka-server7001 EurekaServer服务端安装
- SpringCloud2020 学习笔记(八)cloud-provider-payment8001支付模块入驻eurekaServer注册中心
- SpringCloud2020 学习笔记(九)cloud-consumer-order80 消费者订单模块入驻eurekaServer注册中心
- SpringCloud2020 学习笔记(十)cloud-eureka-server7001 cloud-eureka-server7002 Eureka集群安装
- Python爬虫之抓取某东苹果手机评价
- python学习笔记
- 必看!!!python列表( 增 删 改 查),超详细讲解!!
- Python识别验证码
- 多线程爪巴虫下载进击的巨人
- 利用selenium实现自动翻页爬取某鱼数据
- 20行Python代码爬取下载应用宝所有APP软件
- 爬虫 -- 天天基金网数据简单爬取
- python爬虫-唯品会商品信息实战步骤详解
- go框架中使用CGO,docker build image打包镜像注意事项
- python爬虫汽车之家全车型及基本参数入数据库(截止50524个数据)(详解)