zoukankan      html  css  js  c++  java
  • 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;
    }
    }
    }

  • 相关阅读:
    Educational Codeforces Round 97 (Rated for Div. 2)
    2020 计蒜之道 线上决赛
    kuangbin 莫队专题
    Codeforces Round #677 (Div. 3)
    Codeforces Round #674 (Div. 3)
    Elasticsearch Alias:别名
    Elasticsearch 集群重要配置的修改
    Elasticsearch文档版本冲突原理与解决
    redis操作详情
    对密码必须包含字母,数字,特殊字符正则表达式理解
  • 原文地址:https://www.cnblogs.com/wlp1115/p/6582877.html
Copyright © 2011-2022 走看看