约瑟夫杀人游戏
2014-07-05 18:19
239 查看
据说着名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人 开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。
然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
现在求输入总人数与每第几个人自杀,请问最后活下来的两个人是哪两个位置上的人。
package day03;
import java.util.Scanner;
public class Josephus {
//约瑟夫环问题,输入总人数与每报多少数自杀,输出最后活下来的两个人
public static void main(String[] args){
System.out.println("请输入总人数与每第几个位置自杀:");
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();//总人数
int n=sc.nextInt();//每第几个位置自杀
int loc=0;//当前下标
int tur=1;//每个报数循环的相对位置
int count=m;//记录还剩下多少人
boolean []flag=new boolean[m];
while(count>2){
//通过循环遍历数组,将每第三个位置且未死的人设置为已死
if(flag[loc%m]==false){//这个位置上的人没死,继续判断
if(tur%n==0){//判断是否是处在每个循环的第三个位置
flag[loc%m]=true;
loc++;
tur=1;
count--;//剩下的人数
}
else{
//当前人未处在第三个位置,则继续往下一个位置移动并报数
loc++;
tur++;
}
}
else{
//i位置上的人已经死了,则跳到下一个位置,但是这个位置不报数
loc++;
}
}
System.out.print("活下来的人的位置是:");
for(int i=0;i<m;i++){
//遍历出未死的两个人
if(flag[i]==false){
System.out.print((i+1)+" ");
}
}
}
}
然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
现在求输入总人数与每第几个人自杀,请问最后活下来的两个人是哪两个位置上的人。
package day03;
import java.util.Scanner;
public class Josephus {
//约瑟夫环问题,输入总人数与每报多少数自杀,输出最后活下来的两个人
public static void main(String[] args){
System.out.println("请输入总人数与每第几个位置自杀:");
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();//总人数
int n=sc.nextInt();//每第几个位置自杀
int loc=0;//当前下标
int tur=1;//每个报数循环的相对位置
int count=m;//记录还剩下多少人
boolean []flag=new boolean[m];
while(count>2){
//通过循环遍历数组,将每第三个位置且未死的人设置为已死
if(flag[loc%m]==false){//这个位置上的人没死,继续判断
if(tur%n==0){//判断是否是处在每个循环的第三个位置
flag[loc%m]=true;
loc++;
tur=1;
count--;//剩下的人数
}
else{
//当前人未处在第三个位置,则继续往下一个位置移动并报数
loc++;
tur++;
}
}
else{
//i位置上的人已经死了,则跳到下一个位置,但是这个位置不报数
loc++;
}
}
System.out.print("活下来的人的位置是:");
for(int i=0;i<m;i++){
//遍历出未死的两个人
if(flag[i]==false){
System.out.print((i+1)+" ");
}
}
}
}
相关文章推荐
- 数据结构程序设计——约瑟夫双向生死杀人游戏
- 【BZOJ2438】杀人游戏,tarjan缩点+简单的概率计算
- [BZOJ2428][中山市选2011]杀人游戏(强连通)
- BZOJ 2438 [中山市选2011] 杀人游戏 (图的联通,tarjan)
- 【BZOJ2438】【中山市选2011】杀人游戏 强连通分量+期望
- 杀人游戏
- [bzoj2438][强联通]杀人游戏
- "杀人"游戏中的一些规律
- 2438: [中山市选2011]杀人游戏 tarjan+概率与期望
- 毕业前杀人游戏
- 约瑟夫游戏
- SOA杀人游戏
- bzoj2438 [中山市选2011]杀人游戏
- 利用线性表解决约瑟夫生死游戏
- bzoj2438 [中山市选2011]杀人游戏(tarjan缩点)
- 杀人游戏 - 规则
- 杀人游戏的中英文版本
- 2006年百度之星程序设计大赛复赛题目1:另类杀人游戏
- 杀人游戏分组工具 V1.0 by:wy811007(原创)发布
- BZOJ 2438 中山市选 2011 杀人游戏 Tarjan