第三次作业约瑟夫环(JAVA实现)NO.1
2013-08-26 16:21
295 查看
约瑟夫问题是个著名的题目,它来自于一个历史故事:
古罗马的史学家约瑟夫(Josephus),他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫和犹太叛军战士们,设法守住了裘达伯特城达47天之久。在城市沦陷之后,他和40名犹太叛军的将士们在附近的一个洞穴中避难。在那里,这些叛乱者表决说“要投降毋宁死”,决定在罗马人俘虏他们之前自杀。方法是他们站成一个圈,从一开始,依次杀掉编号是三的倍数的人,直到一个人也不剩。
据传说,Josephus具有非凡的数学天赋,他快速的计算出他和他的朋友应该站的位置,这两个位置也就是最后剩下的两个人。他设法说服了他的朋友,两人幸存了下来,当然这也正是Josephus能够记录下来这段历史的前提。下图演示了一个简化的情况。
==>
本题要求你简单模拟这个过程:N个人排成一圈,从第一个人报数,凡是数到M的人就走出队列(出局),然后继续报数,请按照顺序输出出局的人的编号。
古罗马的史学家约瑟夫(Josephus),他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫和犹太叛军战士们,设法守住了裘达伯特城达47天之久。在城市沦陷之后,他和40名犹太叛军的将士们在附近的一个洞穴中避难。在那里,这些叛乱者表决说“要投降毋宁死”,决定在罗马人俘虏他们之前自杀。方法是他们站成一个圈,从一开始,依次杀掉编号是三的倍数的人,直到一个人也不剩。
据传说,Josephus具有非凡的数学天赋,他快速的计算出他和他的朋友应该站的位置,这两个位置也就是最后剩下的两个人。他设法说服了他的朋友,两人幸存了下来,当然这也正是Josephus能够记录下来这段历史的前提。下图演示了一个简化的情况。
==>
本题要求你简单模拟这个过程:N个人排成一圈,从第一个人报数,凡是数到M的人就走出队列(出局),然后继续报数,请按照顺序输出出局的人的编号。
import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { static int pwd = 0; public static void main(String[] args)throws IOException { Scanner cin = new Scanner(System.in); int N = cin.nextInt(),M=cin.nextInt(); pwd=M; List personNo = new ArrayList(); for(int i=0;i<N;i++){ personNo.add(i+1); } out(personNo,1); } public static int out(List array,int num){ if(array.size()==1){ System.out.println(array.get(0)); return (Integer)array.get(0); }else{ for(int j=0;j<array.size();j++){ if(num%pwd==0){ System.out.print(array.get(j)+" "); array.remove(j); j=j-1; num=1; }else{ num++; } } } return out(array,num); } }
相关文章推荐
- java第三次作业:Java与socket实现
- Java循环链表实现约瑟夫环
- 约瑟夫环问题 java代码实现(高效率)
- 用java实现约瑟夫环问题
- 约瑟夫环java实现的方法
- Java入门编程(作业)Time3实现总结(二)
- 【约瑟夫环】Java实现:100个人开始从1开始报数,每当报数到3,报数3的人离开,求最后留下来人的位置。
- 短作业优先调度算法(SJF)——Java实现
- 约瑟夫环 java实现
- 吉软_java57_第三次作业
- java第三次作业
- java第二周作业--实现分数的四则运算
- 面试题—Java递归实现约瑟夫环
- 约瑟夫环(java面向对象实现)
- 用线性表实现约瑟夫环(java版)
- java第三次作业
- [leetcode-Array] No.1 JAVA实现
- Java语言解决约瑟夫环问题(ArrayList实现)
- 约瑟夫环问题-java实现
- Java 大作业 个人通讯录的实现