package day_2; 

 import java.util.Scanner;

 /**
* @author Administrator
* 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围坐一圈,约定编号为k(1<=k<=n)
* 的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次
* 类推,直到所有人出列为止,由此产生一个出队编号的序列。
* 方法一:数组取模法、(模拟)
*/ public class Demo_1 {
public static void main(String args [])
{
int n,m;
Scanner cin;
while(true)
{
cin = new Scanner(System.in);
n=cin.nextInt();
m=cin.nextInt();
if( 0==n+m ) break;
fun_2(n,m);
}
// cin.close();
}
//方法一: 数组模拟
static void fun_1(int n ,int m){
boolean [] arr = new boolean [n+1];
for(int i=0;i<=n;i++)
arr[i]=true;
//双亲数组法
int pos=1;
m--;
while(true){
int cnt=pos;
while(!arr[(pos+m)%(n+1)==0?1:(pos+m)%(n+1)]){
++pos;
if(pos-cnt>=n) return ;
}
pos=(pos+m)%(n+1)==0?1:(pos+m)%(n+1);
arr[pos]=false;
System.out.println(pos);
++pos;
}
} /**
* 方法二: 循环链表模拟
*/
static void fun_2(int n , int m){
class child{
int id ;
child next ;
public child(){};
int getId() {
return id;
}
child getNext() {
return next;
}
} ; //模拟c循环链表
child head,a;
a = new child() ;
a.id = 1 ;
head = a ;
for(int i=2 ; i<=n ; i++ ){
child b = new child() ;
b.id = i ;
head.next = b ;
head = b ;
}
head.next = a;
while(a!=a.next){
child b=head.next;
for(int i=1; i<m ;i++ ){
b=a;
a=a.next;
}
System.out.println(a.id);
a=a.next;
b.next=a;
System.gc();
}
if(m>1) System.out.println(a.id);
}
}

Java学习之约瑟夫环的两中处理方法的更多相关文章

  1. Java学习-043-获取文件在目录中的路径

    我们在日常的电脑使用中,经常需要在当前目录或当期目录及其子目录中查找文件,并获取相应的文件路径名.在我们的自动化测试中,也经常需要确认文件在目录中是否成功生成或已存在,因而我写了一个小方法来实现. 获 ...

  2. 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写

    一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...

  3. Java学习day8面向对象编程2-类的属性和方法

    一.类的属性 1.语法格式 修饰符 类型 属性名 = 初值 说明:修饰符private:该属性只能由该类的方法使用.在同一类内可见.使用对象:变量.方法. 注意:不能修饰类(外部类)    修饰符pu ...

  4. Java学习之道:jdk环境变量配置方法

    JDK(Java Development Kit)是整个Java的核心,包含了Java执行环境.Java工具和Java基础类库.JDK作为JAVA开发的环境,无论是做JAVA开发还是做安卓开发,都必须 ...

  5. Effective Java 学习笔记之所有对象都通用的方法

    一.覆盖equals时请遵守通用约定 1.满足下列任何一个条件时,不需要覆盖equals方法 a.类的每个实例本质上都是唯一的.此时就是Object中equals方法所表达的含义. b.不关心类是否提 ...

  6. Java学习笔记——JDBC之PreparedStatement类中“预编译”的综合应用

    预编译 SQL 语句被预编译并存储在 PreparedStatement 对象中.然后可以使用此对象多次高效地执行该语句. 预编译的优点 1.PreparedStatement是预编译的,对于批量处理 ...

  7. java学习笔记07-循环

    java有三种主要的循环结构 while循环 do...while循环 for循环 while循环 while(布尔表达式){ //循环内容 } public static void main(Str ...

  8. JAVA学习7:在Maven仓库中添加Oracle JDBC驱动

    由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 一.首先要得到Oracle ...

  9. Java学习----this和super(在继承中)

    public class Base { /*public Base() { System.out.println("Base 类的初始构造方法"); }*/ public Base ...

随机推荐

  1. 【转载】跟着9张思维导图学习JavaScript

    原文:跟着9张思维导图学习JavaScript 学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将 po 出我收集的 9 张 JavaScript相关的思维导图(非原创). 思维导图小ti ...

  2. How To Use RUN_PRODUCT In Oracle Forms

    Run_Product is used to run Oracle Reports (RDF/REP files) in Oracle Forms. It invokes one of the sup ...

  3. Create Custom Modal Dialog Windows For User Input In Oracle Forms

    An example is given below to how to create a modal dialog window in Oracle Forms for asking user inp ...

  4. Jenkins-CVE-2016-0792漏洞利用及修复建议

    漏洞概述: 国外网站 Contrast Security 于2016年2月24日在公开了Jenkins近日修复的一个可通过低权限用户调用 API 服务致使的命令执行漏洞详情.通过低权限用户构造一个恶意 ...

  5. gastic 安装

    所有文件下载地址: ftp://ftp.broadinstitute.org/pub/GISTIC2.0/ cd /home/software/ tar zxf GISTIC_2_0_22.tar.g ...

  6. SQL——连接查询

    以mysql为例: 新建两张表table1和table2 CREATE TABLE `table1` ( `id` ) NOT NULL auto_increment, `name` ) defaul ...

  7. Perfection Kills

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 2013 Multi-University Training Contest 6

    HDU-4655 Cut Pieces 题意:有N个格子能够被涂色,每个格子能够涂1-ai 种颜色,当N=6,涂色方案:112233 认为方案中共有3个颜色块:涂色方案:121212 认为方案中共有6 ...

  9. RTMP命令亲自测试记录

    手动和自动录像模块: recorder rec1 { record all manual; record_unique on; record_notify on; record_max_size 51 ...

  10. 统一事件源epoll代码示例

    可以将信号注册进pipe管道的写端,通过对读端的监听,来实现统一事件源. #include <sys/types.h> #include <sys/socket.h> #inc ...