• Joseph



    public class Joseph {

    /*
    * author: acme
    * date: 2017-1-26
    * blogs: http://blog.csdn.net/qq_18297675
    */

    public static void main(String[] args) {
    Joseph j = new Joseph();
    j.print(41, 3);
    System.out.println(j.getLastOne(41, 3));
    }

    private class Node { //节点类

    private int data;
    Node next;
    }

    private Node createCycleList(int n) {
    Node head = new Node(); //头节点只是中转作用
    Node tail = new Node(); //尾指针,最后用来连接头尾
    for (int i = n;i > 0;i--) {
    Node node = new Node();
    node.data = i;
    if (i == n)
    tail.next = node; //尾指针指向最后一个节点
    node.next = head.next;//利用头添加法 ,所以序号i要倒着添加
    head.next = node;
    }
    tail.next.next = head.next;//尾指针指向第一个节点
    return head.next; //去掉头节点返回
    }

    //打印出死亡顺序
    public void print(int n, int k) {
    if (k <= 0) return;
    Node cur = createCycleList(n);
    if (k == 1) {//如果自杀规则是 1 的话,那肯定是最后一个不死了
    for (int i = 0;i < n;i++, cur = cur.next)
    System.out.print(cur.data+"->");
    System.out.println();
    } else {
    while (cur != cur.next) {//当只剩下最后一个元素后,clist就不等于clist->next
    for (int i = 0;i < k - 2;i++) //这个循环只能循环到要删掉的节点的前一个
    cur = cur.next; //(因为后面删除节点的时候,需要前一个指向后后一个节点)
    System.out.print(cur.next.data+"->"); //打印出后一个节点的值
    cur.next = cur.next.next;
    cur = cur.next;
    }
    System.out.println(cur.data);
    }
    }

    //获取最后一个dead位置
    int getLastOne(int n, int k) {
    if (k < 1) return -1;
    Node cur = createCycleList(n);
    if (k == 1) //如果自杀规则是 1 的话,那肯定是最后一个不死了
    for (int i = 0;i < n;i++, cur = cur.next);
    else {
    while (cur != cur.next) {//当只剩下最后一个元素后,clist就不等于clist->next
    for (int i = 0;i < k - 2;i++) //这个循环只能循环到要删掉的节点的前一个
    cur = cur.next; //(因为后面删除节点的时候,需要前一个指向后后一个节点)
    cur.next = cur.next.next;
    cur = cur.next;
    }
    }
    return cur.data;
    }

    //获取最后一个dead的规则
    int getRule(int n, int local) {
    int k = 0;
    while (true) {
    if (getLastOne(n, k++) == local)
    return k - 1;
    }
    }
    }

  • 相关阅读:
    Python 使用ASE加密与解密
    21年我的目标
    Python使用struct模块发送字节数据解析协议
    强大的awk,解决liunx中解决浮点数计算
    没错,这是我20年正式总结
    2020年度总结--杂谈,不是技术文章
    libcurl 工具类
    【C++开源库】Windows 下编译 libcurl 库
    Qt 封装HTTP网络工具类HttpClient
    Qt 访问网络
  • 原文地址:https://www.cnblogs.com/wlp1115/p/6582877.html
Copyright © 2020-2023  润新知