约瑟夫环问题:50个人围成一圈,数到3和3的倍数时出圈,问剩下的人是谁?在原来的位置是多少?
思路如下:
1)首先,把数据填充到数组或链表中;
2)用一个while循环进行出圈,直到只剩下一个元素留下。
代码如下:
package cn.wuhan.unit7; import java.util.*; public class YueSeFu { public static int cycle(int total,int k){ List<Integer> dataList = new LinkedList<Integer>();//创建一个链表 for(int i=0;i<total;i++) //添加数据成员 dataList.add(new Integer(i+1)); int index=-1; //循环 while(dataList.size()>1){ index = (index+k)%dataList.size();//以(index+k)对size()取余 dataList.remove(index--); } return ((Integer)dataList.get(0).intValue());//返回它的值 } public static void main(String[] args) { System.out.println("该人原来的位置是: "+cycle(50,3)); } }
效果如下:
原文地址:http://blog.csdn.net/sanqima/article/details/36177281