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 ...
随机推荐
- [HDOJ5787]K-wolf Number(数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5787 题意:求[L,R]区间内的数字,使得所有长度为k的子数列内所有数位都不同. K<=5的所以 ...
- NoSQL聚合数据模型
NoSQL聚合数据模型 特点 聚合数据模型的特点就是把经常访问的数据放在一起(聚合在一块): 这样带来的好处很明显,对于某个查询请求,能够在与数据库一次交互中将所有数据都取出来: 当然,以这种方式存储 ...
- hdu 4217 Data Structure? 树状数组求第K小
Data Structure? Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- HTML笔记(二) 在HTML中使用CSS
外部CSS: <head> <link rel="stylesheet" type="text/css" href="mystyle ...
- ubuntu 安装遇到黑屏
1.安装了ubuntu之后,进入登录页面,然后用输入密码后就黑屏了,按ctrl+alt+f1都没用,也进不去命令界面,查找资料后发现是必须在虚拟机->设置->硬件->显示器,上把加速 ...
- iOS - UISwitch
前言 NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UISwitch : UIControl <NSCoding> @a ...
- 跨代的对决 英特尔i7-6700HQ对比i7-4720HQ性能测试
http://itianti.sinaapp.com/index.php/cpu 跨代的对决 英特尔i7-6700HQ对比i7-4720HQ性能测试 2015-10-13 19:46:31 来源:电脑 ...
- 超实用压力测试工具-ab工具
在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second)概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求 ...
- HLS播放权限测试记录
阿里云: http://live.mudu.tv/watch/11y1at.m3u8 斗鱼加密: http://hls3a.douyucdn.cn/live/485503r63zGiPn4D_550/ ...
- hibernate对象关系实现(二)一对一
双向一对一以部门和经理为例: a.部门和经理类中各自由对方的引用:(省略了get/set方法) b.数据库两种方式实现:一种(b.1)是外键映射,并将外键添加唯一约束(至于哪个对象的主键做外键,可随意 ...