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;
   
}
这个应该就可以
可能有些细节没想到,你自己加上吧.

解决方案 »

  1.   

    我写了个程序,编译过了,没问题。
    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();
    }
    }
      

  2.   

    这个好像是josephus问题,我用链表写了一个:
    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的结构。