约瑟夫问题JAVA算法
来源:互联网 发布:mac dare you 不好看 编辑:程序博客网 时间:2024/06/05 01:05
去年学院举办的算法设计比赛,当时使用的c语言来描述的,而且当时刚刚学了数据结构。于是就用到循环链表来解决,虽然答案没有完全出来,但是评分的老师,看了我的代码和思路,也许是半个感情分,毕竟是学校的算法比赛,不是正规的比赛,于是给了半钩。
现在学了Java语言,重新用java来解决这个问题。
百度百科对约瑟夫问题的描述:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决?Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
这个算法算出最后一个自杀的人的号码:
对上面的算法的改进,定义一个整型数组,里面存放模拟的人的编号,每当有人退出该圈的时候,就把他插入数组的尾部。
注:该博文是本人搬家自ChinaUnix文章,去年是指2013年。
现在学了Java语言,重新用java来解决这个问题。
百度百科对约瑟夫问题的描述:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决?Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。
这个算法算出最后一个自杀的人的号码:
public class Josephus { public staticvoid main(String[] args){ boolean a[]= new boolean[10]; for(int i= 0; i < a.length; i++){ a[i]= true; } int dieNumber = 3; int leftCount = a.length; int index = 0; int count= 0; while(leftCount> 1) { if(a[index]){ count++; if(count% dieNumber == 0){ a[index]= false; leftCount--; } } index++; index %= a.length; } for(int i= 0; i < a.length- 1; i++){ if(a[i]){ System.out.print("最后剩下的人:"+ (i+1)); } } } }
class Josephus1{ public staticvoid main(String[] args){ int[] a= new int[41]; for(int i= 0; i < a.length; i++){ //对数组中的元素进行赋值 a[i]= i + 1; } int index = 0; //声明下标,表明元素所在的位置 for(int i= a.length; i> 0; i--){ index = (index + 2)% i; //该出局的元素 int t = a[index]; //不要把该出局的元素抛弃,先用临时变量存储,到时候在插入到数组的末尾 for(int j= index; j < i-1; j++){ a[j]= a[j+1]; } a[i-1]= t; } //倒序输出数组 for(int i= a.length-1; i>= 0; i--){ System.out.print(a[i]+ " "); } } }
注:该博文是本人搬家自ChinaUnix文章,去年是指2013年。
1 0
- 约瑟夫问题JAVA算法
- Java实现约瑟夫算法问题
- 【java算法】约瑟夫问题求解
- 约瑟夫问题的java简单算法
- 赌博算法之约瑟夫环问题(JAVA)
- java 数组 解决 约瑟夫问题 算法
- 约瑟夫问题算法
- 算法导论-->约瑟夫问题
- 约瑟夫环算法问题
- 【算法详解】约瑟夫问题
- 算法----约瑟夫环问题
- 算法 约瑟夫环问题
- 约瑟夫问题算法
- [算法]约瑟夫环问题
- (算法)约瑟夫环问题
- 算法基础-约瑟夫问题
- 算法之约瑟夫问题
- 约瑟夫java算法代码
- LeetCode 题目总结/分类
- Nim Game——Difficulty:Easy
- Codeforces Round #359 (Div. 2) A
- Android工具类--获取屏幕信息类
- oracle 执行计划学习
- 约瑟夫问题JAVA算法
- Java se项目:记事本
- JavaSrcipt的Object.keys()
- 树--二叉树的数组实现
- 期货交易流程
- 数组形参2
- MyBatis学习之三:动态SQL语句
- spring的事务配置详解
- CSS3:各种浏览器私有属性