约瑟夫问题2

来源:互联网 发布:python清空文件夹内容 编辑:程序博客网 时间:2024/06/07 01:38

题目描述
约瑟夫问题是一个著名的趣题。这里我们稍稍修改一下规则。有n个人站成一列。并从头到尾给他们编号,第一个人编号为1。然后从头开始报数,第一轮依次报1,2,1,2…然后报到2的人出局。接着第二轮再从上一轮最后一个报数的人开始依次报1,2,3,1,2,3…报到2,3的人出局。以此类推直到剩下以后一个人。现在需要求的即是这个人的编号。
给定一个int n,代表游戏的人数。请返回最后一个人的编号
测试样例
5
返回:5
我的算法:

import java.util.*;class ListNode{    int val;    ListNode next;    ListNode(int x){        val=x;        next=null;    }    static ListNode createList(int n){        ListNode head=new ListNode(1);        ListNode node=head;        for(int i=2;i<=n;i++){            node.next=new ListNode(i);            node=node.next;        }        node.next=head;        return head;    }}public class Joseph {    public int getResult(int n) {        // write code here        ListNode head=ListNode.createList(n);        ListNode node=head;        int count,m=1;        while(node!=node.next){            count=0;            if(node.next!=head){                while(node.next!=head&&count!=m){                    node.next=node.next.next;                    count++;                }                node=(head==node.next)?node:node.next;            }            else{                m++;                head=node;            }        }        return node.val;    }}

研究问题需要全面。

0 0
原创粉丝点击