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. Java EE 锚、表格用法

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  2. [SAP ABAP开发技术总结]物料、生产、采购、销售长文本

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. git :设置 object-c 的忽略文件

    使用 git 命令行来进行版本控制的时候, 需要设置忽略文件. 这里能找到所有语言的忽略文件的内容:https://github.com/github/gitignore OBJECT的忽略文件内容: ...

  4. elcipse 安装svn插件 转载

    1.下载最新的Eclipse,我的版本是3.7.2 indigo(Eclipse IDE for Java EE Developers)版    如果没有安装的请到这里下载安装:http://ecli ...

  5. iOS8 获取通知设置状态

    UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSet ...

  6. hdu3060Area2(任意多边形相交面积)

    链接 多边形的面积求解是通过选取一个点(通常为原点或者多边形的第一个点)和其它边组成的三角形的有向面积. 对于两个多边形的相交面积就可以通过把多边形分解为三角形,求出三角形的有向面积递加.三角形为凸多 ...

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

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

  8. [js] 有趣的js面试题,你答对了吗?

    题目1: 回答以下代码,alert的值分别是多少?

  9. 关于时区的时间的详解,比如UTC\GMT等

    UTC 和 GMT 及 北京时间的关系 UTC和GMT,这两者几乎是同一概念.它们都是指的格林尼治标准时间,只不过UTC的称呼更为正式一点.两者的区别在于前者是一个天文 上的概念,而 后者是基于一个原 ...

  10. synchronized与static synchronized 的区别

    synchronized是对类的当前实例加锁,防止其他线程同时访问该类的该实例的synchronized块,这里的概念是“类的当前实例”,而static synchronized是对类的所有实例加锁, ...