java 帮忙分析下这个算法

来源:百度知道 编辑:UC知道 时间:2024/06/23 18:30:41
package interview;
import java.util.*;
public class Jesf
{
// 将元素放入链表中,每次从链表依次取出第1、1+m...直至循环l次后剩余的结果
public List a(int n,int m,int l){
List list=new ArrayList();
for(int i=1;i<=n;i++){
list.add(i);
}
for(int i=0;i<l;i++){
for(int index=0;index<list.size();index=index+m-1){
list.remove(index);
}
}
return list;
}

public static void main(String args[]){
Jesf j=new Jesf();
List list=j.a(15, 7, 4);
Iterator iter=list.iterator();
while(iter.hasNext())
{
Integer i=(Integer)iter.next();
System.out.print(i+" ");
}
}
}
//运行结果:5 6 7 9 11 13
题目是:有N(N>1)个整数,要求每隔M(M>1)个就去掉一个。(如:M=3,第一个去掉1,第二个去掉4,第三个去掉7,依次类推),直到取了L次(L<M)后,剩余的数是什么?
是人家写的 你空的话尽快改个出来给我看看

你这个程序写的很乱
不要在原有的list上面remove
试验一下创建一个新的list去add,效果会很好,出了问题也很好找
如果写不出来再补充
有时间时候给你写一下

典型的约瑟夫环问题
int fun(int n, int m)
{
int i, r = 0;
for (i = 2; i <= n; i++)
r = (r + m) % i;
return r+1;
}

变量说明:

i:循环控制量

r:序号

n:总人数

m:报数号给你个算法