约瑟夫环问题

转载 2007年09月15日 17:30:00

两个类:Person.java   GetOut.java
Person.java 人类,包含一个名字属性,一个报数的方法
GetOut.java 计数类,包含一个队列,添加100个人进队列后,经过out()方法,剩下唯一的幸存者。
^_^    勇敢者游戏,I love this game !!

附源程序:
/*
 *  Author   : Lislie
 *  Time     : 2007-9-13  19:32
 *  About    : 100个人做游戏,让100个人围成一个大圈,每个人分别报数,报数方式是从1开始到7结束,报到7的人退出游戏,余下的人继续报数,
 *    从推出的下一个人开始从新报1 ,报7的人退出,一次循环,找出最终获胜选手。
 * Founction: class 人
 *
 * */
package arithmetic.person;

public class Person {
String name;

public Person(String name) {
this.name = name;
}

public int callNum(int a) {
return ++a;
}
}


/*
 *  Author   : Lislie
 *  Time     : 2007-9-13  19:32
 *  About    : 100个人做游戏,让100个人围成一个大圈,每个人分别报数,报数方式是从1开始到7结束,报到7的人退出游戏,余下的人继续报数,
 *    从推出的下一个人开始从新报1 ,报7的人退出,一次循环,找出最终获胜选手。
 * Founction:
 *
 * */
package arithmetic.person;

import java.util.ArrayList;

public class GetOut {

ArrayList array; // 队列

public GetOut(int NUM) {
array = new ArrayList();

// 人类初始化,加入队列中
for(int i=0;i<NUM;i++)
array.add(new Person("a" + i));
}

public Person out() {
int count = 0;   // 喊吧

while(array.size()>1) {
for(int i=0;i<array.size();i++) {
Person p = (Person)array.get(i);
count = p.callNum(count);

// 喊道7,出局  计数从新开始
if(count == 7) {
array.remove(i);
count = 0;   // 计数归0
}
}
}

// 唯一的幸存者
return (Person)array.get(0);
}

public static void main(String args[]) {
int NUM = 100;

GetOut go = new GetOut(NUM);
Person p = go.out();
System.out.println("My name is " + p.name + "!");
}
}

运行结果:
My name is a58!
 

相关文章推荐

重新认识java(十) ---- Enum(枚举类)

有的人说,不推荐使用枚举。有的人说,枚举很好用。究竟怎么使用,如何使用,仁者见仁智者见智。总之,先学会再说~

VxWorks BSP开发培训内容

热线:021-51875830 62450161 0755-61280252   025-68662821  010-51292078传真:021-62450161 0755-25912501业务手机...

枚举、匿名内部类学习笔记

[java] view plaincopy /*      ### 枚举类型复习笔记  ###   *    *&#...
  • ccecwg
  • ccecwg
  • 2015-01-21 10:34
  • 1016

Java泛型详解

1. 概述 在引入范型之前,Java类型分为原始类型、复杂类型,其中复杂类型分为数组和类。引入范型后,一个复杂类型 就可以在细分成更多的类型。 例如原先的类型List,现在在细分成List, L...

使用异常的最佳实践(Best Practices for Using Exceptions)

1. 总是要做一些清理工作(Always clean up after yourself) 如果你使用一些资源例如数据库连接或者网络连接,请记住要做一些清理工作(如关闭数据库连接或者网络连接),...

实现带有验证码的ajax局部刷新登录界面

现在的登录界面大多数都带有:验证码的功能+验证码局部刷新+ajax登录。用ajax登录的好处最明显就是速度快,URL地址没有变化。所有现在登录功能很少再用form表单post提交了,大多数都已经采用了...

JAVA内部类使用,什么时候该使用内部类及使用内部类的好处

提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。内部类从表面上看, ...

java中如何避免空指针异常

java中的空指针是最常见的错误之一,要尽量避免空指针异常,首先在使用对象前,先对其进行初始化。 另外,要完全避免空指针,最好做到以下几点: 1:对于所有 public 方法传入的对象参数进行...

java判断list为空

if(null == list || list.size() ==0 ){ } list.isEmpty()和list.size()==0 没有区别 isEmpty()判断...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)