约瑟夫环是一个数学的应用问题,具体为,已知 n 个人(以编号 1,2,3…n 分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。这个问题的输入变量就是 n 和 m,即 n 个人和数到 m 的出列的人。输出的结果,就是 n 个人出列的顺序。
publicstaticvoidmain(String[] args){ring(10,5);}publicstaticvoidring(int n,int m){
LinkedList<Integer> q =newLinkedList<Integer>();for(int i =1; i <= n; i++){
q.add(i);}int k =2;int element =0;int i =0;for(; i<k; i++){//从k开始报数
element = q.poll();//获取首元素,并删除
q.add(element);//放到尾部}
i =1;while(q.size()>0){
element = q.poll();//获取首元素,并删除if(i < m){
q.add(element);//放到尾部
i++;}else{
i =1;
System.out.println(element);}}}
约瑟夫环是一个数学的应用问题,具体为,已知 n 个人(以编号 1,2,3…n 分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。这个问题的输入变量就是 n 和 m,即 n 个人和数到 m 的出列的人。输出的结果,就是 n 个人出列的顺序。这个问题,用队列的方法实现是个不错的选择。它的结果就是出列的顺序,恰好满足队列对处理顺序敏感的前提。因此,求解方式也是基于队列的先进先出.