约瑟夫环

来源:互联网 发布:查看本地数据库ip 编辑:程序博客网 时间:2024/06/05 08:09

题目:0,1,2,3,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈中删除第m个数字。求这个圆圈中剩下的最后一个数字。 这个问题就是约瑟夫环问题。

代码:

/** * 题目:0,1,2,3,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈中删除第m个数字。求这个圆圈中剩下的最后一个数字。 * 这个问题就是约瑟夫环问题。 */package problem2;import java.util.LinkedList;/** * @author Hutongling * * @time:2017年3月31日 上午11:22:05 */public class 圆圈中最后剩下的数字 {    static int lastNum(int[] data,int m){        if(data==null || data.length==0 || m<1 || m>data.length)            return -1;        int result=0;        LinkedList<Integer> list=new LinkedList<Integer>();        for(int i=0;i<data.length;i++)            list.add(data[i]);        int index=0;        int count=1;        while(list.size()>0){            if(count==m){                result=list.remove(index);                count=1;            }            else            {                count++;                index=(++index)%list.size();            }        }        return result;    }    public static void main(String[] args) {        int[] data=new int[16];        for(int i=0;i<data.length;i++)            data[i]=i;        System.out.println("最后剩下的数字是:" + lastNum(data,10));    }}

结果为:
最后剩下的数字是:0

0 0
原创粉丝点击