本帖最后由 barlay 于 2013-12-14 19:26 编辑
- /* 约瑟夫问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位 */
- public class Josephus{
- public static void main(String[] args) {
- System.out.println(fun(Integer.valueOf(args[0])));
- }
- public static int fun(int n){
- int[] arr = new int[n+1];
- int k = n ,i = 1,j = 1;
- while(k > 0){
- if(arr[i] == 0){
- if(j != 3){
- j++;
- }else{
- arr[i] = 1;
- j = 1;
- //System.out.println(i);
- if(--k == 0){
- k = i;
- break;
- }
- }
- }
- if(i++ == n)
- i = 1;
- }
- return k;
- }
- }
复制代码 运行测试:
javac Josephus.java
java Josephus 6
输出 1
有没有大神能写个链表的实现啊?
|