读书人

编撰一个小算法

发布时间: 2012-10-09 10:21:45 作者: rapoo

编写一个小算法
有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));                   }    } 

读书人网 >J2SE开发

热点推荐