N个数字(0,1,....,N-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第M个数字(第一个数字为当前数字本身,第二个数字为当前数字的下一个数字)。当一个数字删除后,从被删除的数字的下一个数字继续删除第M个数字,求出这个圆圈的最后一个数字?

解决方案 »

  1.   

    //求约瑟夫问题类
    // 方法palindrome(int N,int M)
    import java.util.ArrayList;
    public class Palindrome {
    public void palindrome(int N,int M){
     ArrayList<Integer> list = new ArrayList<Integer>();
     for (int i = 1; i <= N; i++) {
     list.add(i);
     }
     int i = 1;
     while (list.size()>1) {
     Integer[] listNum = list.toArray(new Integer[0]);
     for(int n : listNum){
     if (i < M) {
     i++;
     }else {
    //System.out.println(n); //按出局顺序输出出局的数字
     list.remove(Integer.valueOf(n));
     i=1;
      }
     }
    }
     System.out.println(list.get(0));
    }
    }
    //测试类
    package com.bean;public class Test {
     public static void main(String[] args) {
    Palindrome p=new Palindrome();
    p.palindrome(11, 3);//传入参数
    }}