当前位置: 代码迷 >> J2SE >> 编撰一个小算法
  详细解决方案

编撰一个小算法

热度:3333   发布时间:2013-02-25 00:00:00.0
编写一个小算法
有500个小朋友编号1-500 围成一圈,做1-3数数小游戏。 数到3的时候 那位小朋友推出,一直循环,算出最后一个小朋友的编号。

------解决方案--------------------------------------------------------
Java code
package com.zf.test;import java.util.LinkedList;import java.util.List;public class Test3 {        //虚拟 n 个children    public List<Integer> buildChildren(int childrenSize){        List<Integer> children = new LinkedList<Integer>();        for (int i = 1 ; i <= childrenSize; i++) {              children.add(i);        }        return children;    }             //递归计算    public int calc (int currentNo , int currentListIndex , List<Integer>  children){        if(currentListIndex == children.size()){            if(children.size() > 1){                currentListIndex = 0 ;            }else{                return children.get(0);              }        }                if(currentNo == 3){            children.remove(currentListIndex);            currentNo = 1;        }else{            currentNo++;            currentListIndex++;        }        return calc(currentNo , currentListIndex , children) ;    }    //包装    public int run( int childrenSize){        return calc(1 , 0 , buildChildren(childrenSize));    }        public static void main(String[] args) {                Test3 t = new Test3();         System.out.println("最后退出的小朋友为:" + t.run(500));                   }    }
  相关解决方案