解决方案 »

  1.   

    前段时间的:http://bbs.csdn.net/topics/390793174
      

  2.   

    public class Arithmetic {

    private List<String> list = new ArrayList<String>(); public void arithmetic(int index, int size) {
    List<String> person = new ArrayList<String>();
    List<String> delete = new ArrayList<String>();
            int suffix = 1 + index;
            for (int i = 0; i < size; i++) {
                if (suffix > 3) {
                    suffix = 1;
                }
                String element = null;
                if (list.get(i).indexOf("_") != -1) {
                 element = list.get(i).split("_")[1];
                } else {
                 element = list.get(i);
                }
                person.add(Integer.valueOf(suffix).toString() + "_" + element);
                if (suffix %3 == 0){
                 delete.add(person.get(i));
                }
                suffix ++;
            }
            System.out.println(person);
            index = Integer.parseInt(person.get(person.size() - 1).split("_")[0]);
            person.removeAll(delete);
            System.out.println(person);
            System.out.println("------------------------------");
            if (person.size() > 1) {
             list = person;
                arithmetic(index, person.size());
            } else {        }
        }    public void init (int size) {
         for (int i = 1; i <= size; i++) {
               list.add("人" + i + "人");
            }
         System.out.println(list);
            this.arithmetic(0, size);
        }    public static void main(String [] args) {
            // 设置初始人数
            new Arithmetic().init(500);
        }
    }
      

  3.   

    我的做法是把每个位置的字符和位置存到一个 person类中,最后剩一个时候,打印出它的位置public class loop { public static void main(String[] args) {
    String a="1357";  //输入的字符串
    fun(a,3);
    }
    public static void fun(String s,int n){
    person p[];;
    ArrayList<person> list=new ArrayList<person>(); 
    for(int i=0;i<s.length();i++)
    list.add(new person(s.charAt(i),i));


    int count=n;
    int temp=0;
    for(int i=0;i<s.length()-1;i++)
    {
    temp=(n-1)%list.size(); //每次都求出要出列的位置
    System.out.print(list.get(temp).s);  //打印值
    list.remove(temp);         //出列
    n=count+temp;  //本次出列的位置加上count 记录当前指针走到哪里
    }
    System.out.print("最后一个位置:"+list.get(0).num);
    }
    }
    class person{   //记录每个字母的值和数字,如果只要求位置的话,直接可以用int 类型替代
    public int num;
    public char s;
    public person(char c,int num){
    this.s=c;
    this.num=num;
    }
    }
      

  4.   

    这就是约瑟夫问题吧。用环形链表可以解决:
    可以参考下:
    http://www.cnblogs.com/myCodingSky/p/3803767.html