/**
* 据说著名犹太历史学家 Josephus有过以下的故事:
* 在罗马人占领乔塔帕特後,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被人抓到,
* 于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,
* 直到所有人都自杀身亡为止。
* 然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,
* 于是逃过了这场死亡游戏。
*
*/
public class JosephusProblem {
static int N = 41;
public static void main(String[] args) {
int M = 3;//数到第N个时自杀
Queue<Integer>q1 = new LinkQueue<Integer>();
for(int i = 0;i<N;i++){
q1.push(i+1);
}
kill(q1,M,0,1);
}
/**
* @param q 队列
* @param n 数到第N个时自杀
* @param i 本论自杀数数完毕之后数到了第几
* @param level 第几轮
*/
public static void kill(Queue<Integer> q,int n,int i,int level){
formatPrintln(q);
if(q.isEmpty() || q.size()==1){
if(q.size()==1){
System.out.println("survivor:"+q.pop());
}
return;
}
Queue<Integer> survivors = new LinkQueue<Integer>();
int peopleIndex = 0;
while(!q.isEmpty()){
peopleIndex = q.pop();
i++;//报数
if(i==n){
formatPrint("^");
i = 0;
}else{
survivors.push(peopleIndex);
formatPrint();
}
}
System.out.println();
for(int x = 0;x<N;x++){
System.out.print("-----");
}
System.out.println();
kill(survivors,n,i,++level);
}
private static void formatPrintln(Queue<Integer> q){
for(Integer i : q){
System.out.print(fullBlank(i+""));
}
System.out.println();
}
private static void formatPrint(String str){
System.out.print(fullBlank(str));
}
private static void formatPrint(){
System.out.print(fullBlank(""));
}
private static String fullBlank(String str){
if(str.length()<5){
str = str+ (" ".substring(0,5-str.length()));
}
return str;
}
}
运行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 2 4 5 7 8 10 11 13 14 16 17 19 20 22 23 25 26 28 29 31 32 34 35 37 38 40 41
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2 4 7 8 11 13 16 17 20 22 25 26 29 31 34 35 38 40
^ ^ ^ ^ ^ ^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2 4 8 11 16 17 22 25 29 31 35 38
^ ^ ^ ^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2 4 11 16 22 25 31 35
^ ^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2 4 16 22 31 35
^ ^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4 16 31 35
^ ^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
16 31
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
16 31
^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
31
survivor:31
分享到:
相关推荐
【软件测试】: 测试用例:场景法设计测试用例.doc
【软件测试】: 测试用例:因果图法设计测试用例.doc
【软件测试】: 测试用例:基本路径测试法用例编写的方法.doc
【软件测试】:测试用例:边界条件测试.doc
【软件测试】: 测试用例:等价类划分方法.doc
09.手把手教你写用例: 优化微信加好友的功能.pdf
VBA程序设计用例:程序流程图及程序代码
1.2.1 用例编号:UC7.1.1 用例名:生成报表……………………….. 1.2.1.1 用例编号:UC7.1.1.1 用例名:生成收货报表……….. 1.2.1.2 用例编号:UC7.1.1.2 用例名:生成发货报表……….. 1.2.1.3 用例编号:UC7.1....
详细地介绍测试用例总结,边界条件《软件测试实用技术与常用模板》作者李龙 教材中附赠
③信息管理用例:管理员可见的功能,这个用例进一步分为三个用例:学生信息管理用例、教师信息管理用例和课程信息管理用例。 ④学生信息管理用例:信息管理用例可见的功能,实现学生信息的管理功能,包含了添加学生...
此外,这种结构化的方法使得方案评审和用例评审更为便捷。基于这样的规范,我们还可以自动生成测试用例和自动化测试脚本,从而显著提升工作效率。 原文链接:...
测试用例是为某个特殊目标而编制的一组测试输入、执行条件、测试步骤以及预期结果。 为什么要写测试用例 1)便于团队交流 ...最佳方案:为每个被测需求至少编制两个测试用例:正面测试用例和负面测试用例
从测试设计面临的4大问题存在的原因和表现形式入手,通过应用不同的测试用例设计技术与方法,结合不同软件产品测试经验,从而不断提高组织的测试能力,进而提升测试覆盖率、测试效率、测试有效性和测试质量。
测试用例设计技术 白盒测试 黑盒测试 用例设计
ATM取款机测试用例,这个可是经典的题目哦,笔试时经常会考到
通过代码自动识别用例:用户的目标驱动方法
用例哨兵用例:可能会失败并返回共同域特殊值的APIundefined且为null用例:可能会失败并返回未定义(或为null)的API例外情况用例:可能抛出的API随机值用例:返回不确定值的API同步副作用用例:读取和/或写入全局...
信息函数 9.1 ISODD 9.2 ISERR 9.3 ISNA 9.4 ISTEXT 9.5 ERROR.TYPE 9.6 ISNUMBER 9.7 ISNONTEXT 9.8 ISERROR 9.9 N 9.10 ISEVEN 用例索引 第1章 文本函数 用例1:将所有单词转换成小写形式(LOWER) 源文件:光盘\...
3.掌握使用活动图细化用例的方法。 1.了解网上选课系统的需求 2.熟悉用例的事件流 (1)添加课程; (2)选课。 3.网上选课系统用例图(读简单需求分析,画1个用例图) 操作提示: (1)创建并设置执行者; (2...
重力感应会使屏幕随着测试机的旋转方向自动旋转