int[] =allman;//定义一个数组
String out;定义字符串存放出局人员
数组初始化.把数据放入
int n=allman.length;
int s,m;
int flag;
附值;
if((s-1)>n)
s=s%n;
while(n>0)
{
if((s+m-1)>n)//如果第m个人已经超过了数组长度
flag=(s+m-2)%n
else
flag=s+m-2;
out+=" ";
out+=allman[flag];
for(int i=flag;i<n-1;i++)//去掉出局的人
allman[i]=allman[i+1];
--n;
s=flag;
}
这个应该就可以
可能有些细节没想到,你自己加上吧.
String out;定义字符串存放出局人员
数组初始化.把数据放入
int n=allman.length;
int s,m;
int flag;
附值;
if((s-1)>n)
s=s%n;
while(n>0)
{
if((s+m-1)>n)//如果第m个人已经超过了数组长度
flag=(s+m-2)%n
else
flag=s+m-2;
out+=" ";
out+=allman[flag];
for(int i=flag;i<n-1;i++)//去掉出局的人
allman[i]=allman[i+1];
--n;
s=flag;
}
这个应该就可以
可能有些细节没想到,你自己加上吧.
public class Eliminate{
private int length;
private int start;
private int interval;
private int kickout;
private int[] point; Eliminate(int length,int start,int interval){
this.length = length;
this.start = start;
this.interval = interval;
kickout = 0;
point = new int[length]; for(int i =0;i < length - 1;i++){
point[i] = i+1;
}
point[length - 1] = 0;
} public void kickMembers(){
int outnum = 0;
while(kickout < length){
for(int i = 0;i < interval - 2;i++){
start = point[start];
}
outnum = point[start];
point[start] = point[outnum];
start = point[outnum];
kickout++;
System.out.print(outnum + " ");
}
} public static void main(String[] args){
Eliminate e = new Eliminate(11,2,3);
System.out.println("出局顺序:");
e.kickMembers();
System.out.println();
}
}
public static int josephus(int all, int passes) {
List theList = new LinkedList();
for(int i=1;i<all+1;i++)
theList.add(new Integer(i));
Iterator it = theList.iterator();
while( theList.size()!=1 ) {
Integer temp = new Integer(0);
for(int i=1;i<=passes;i++) {
if(!it.hasNext())
it = theList.iterator();
Integer k = (Integer)it.next();
if(i==passes) {
temp = k;
}
}
it.remove();
System.out.println(temp.intValue() + " out.");
}
it = theList.iterator();
return ((Integer)it.next()).intValue();
}调用如下:
System.out.println("final one: " + josephus(9, 5));结果如下:
5 out.
1 out.
7 out.
4 out.
3 out.
6 out.
9 out.
2 out.
final one: 8如果想从某个人开始,可以自行修改theList的结构。