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;
    }
    }
    }

  • 相关阅读:
    手动执行把nconf生成的配置文件附加到nagios下
    创建django工程
    mysql安装、配置、导入数据库
    PHP里<?php和<?通用要在配置里怎么设置_百度知道
    Loganalyzer数据库乱码解决方法:
    RSyslog安装配置
    修改cacti的系统时间
    Mysql5.7.11 安装 cacti0.8.8f ,在导入cacti.sql数据库时出现下记错误,导致数据库导入终止: ERROR 1067 (42000) at line 1847: Invalid default value for 'status_fail_date'
    中间件组件
    cookie与session 组件
  • 原文地址:https://www.cnblogs.com/wlp1115/p/6582877.html
Copyright © 2011-2022 走看看