Java学习之约瑟夫环的两中处理方法
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学习之约瑟夫环的两中处理方法的更多相关文章
- Java学习-043-获取文件在目录中的路径
我们在日常的电脑使用中,经常需要在当前目录或当期目录及其子目录中查找文件,并获取相应的文件路径名.在我们的自动化测试中,也经常需要确认文件在目录中是否成功生成或已存在,因而我写了一个小方法来实现. 获 ...
- 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写
一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...
- Java学习day8面向对象编程2-类的属性和方法
一.类的属性 1.语法格式 修饰符 类型 属性名 = 初值 说明:修饰符private:该属性只能由该类的方法使用.在同一类内可见.使用对象:变量.方法. 注意:不能修饰类(外部类) 修饰符pu ...
- Java学习之道:jdk环境变量配置方法
JDK(Java Development Kit)是整个Java的核心,包含了Java执行环境.Java工具和Java基础类库.JDK作为JAVA开发的环境,无论是做JAVA开发还是做安卓开发,都必须 ...
- Effective Java 学习笔记之所有对象都通用的方法
一.覆盖equals时请遵守通用约定 1.满足下列任何一个条件时,不需要覆盖equals方法 a.类的每个实例本质上都是唯一的.此时就是Object中equals方法所表达的含义. b.不关心类是否提 ...
- Java学习笔记——JDBC之PreparedStatement类中“预编译”的综合应用
预编译 SQL 语句被预编译并存储在 PreparedStatement 对象中.然后可以使用此对象多次高效地执行该语句. 预编译的优点 1.PreparedStatement是预编译的,对于批量处理 ...
- java学习笔记07-循环
java有三种主要的循环结构 while循环 do...while循环 for循环 while循环 while(布尔表达式){ //循环内容 } public static void main(Str ...
- JAVA学习7:在Maven仓库中添加Oracle JDBC驱动
由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 一.首先要得到Oracle ...
- Java学习----this和super(在继承中)
public class Base { /*public Base() { System.out.println("Base 类的初始构造方法"); }*/ public Base ...
随机推荐
- Checking For User Permissions Before Updating or Inserting The Records in Oracle Forms
Suppose you want to check the user permissions on inserting or updating the records in Oracle Forms, ...
- SQL行转列
目的:将相同条件的多行值合并到同一列, 1.创建测试表: CREATE TABLE [dbo].[TB_01]( ) NULL, ) NULL, [SDATE] [datetime] NULL ) O ...
- 这只是一篇用Markdown写的随记,就是熟悉熟悉MarkDown而已
这几天的随想 今天是八月十一号了,来到公司实习已经第八天了,包块周末的话就是十二天了,我在这十二天里干了什么,转眼半个月就过去了 马上就要开学了,这个暑假干了些什么,单词单词也没背多少,之前七月回家有 ...
- 使用ultramon调整任务栏高度
取消锁定,调整任务栏的高度为一行图标的高度,然后再锁定即可.为啥程序没有默认设置?
- javascript中获取非行间样式的方法
我们都知道一般在javascript中获取样式一般用的是nodeObj.style.attr这个属性的,但是这个属性只能获取行间样式非行间样式比如写在样式表中的样式那么用nodeObj.style.a ...
- 树的计数 + prufer序列与Cayley公式 学习笔记
首先是 Martrix67 的博文:http://www.matrix67.com/blog/archives/682 然后是morejarphone同学的博文:http://blog.csdn.ne ...
- maven核心概念4
一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...
- Docker-创建支持ssh服务的镜像
这里测试tomcat镜像安装ssh服务 1.启动镜像 [root@wls12c docker]$ docker run -d tomcat:centos 844bdde121a03174f3abd22 ...
- 【linux 命令】:查看系统开机,关机时间【转载】
转载原文:http://www.cnblogs.com/kerrycode/p/3759395.html 看Linux开机关机时间的方法(非常全面) 1: who 命令查看 who -b 查看最后一次 ...
- Java Base64编码解码实现
我尝试过两种方式:java自带的sun.misc的工具类,还有commons-codec.jar 1.sun.misc的工具类 String encoderStr = null; BASE64Enco ...