由m个人围成一个首尾相连的圈报数。从第一个人开始,从1开始报数,报到n的人出圈,
剩下的人继续从1开始报数,直到所有的人都出圈为止。对于给定的m和n,求出所有人的出圈顺序.其实就是编个function函数

解决方案 »

  1.   

    给你两个我曾经用java面向对象的思想写的这个实现的用法,你可以参考一下,用javascript写也是差不多的:
    package com.zhangyilin.count3quit1;public class Circle { private Kid first;
    private Kid last;
    private int size;

    public static void main(String args[]) {
    Circle c = new Circle(500);
    int count = 1;
    Kid kid = c.getFirst();
    int n = 500;
    // for (int i=0;i<100;i++) {
    // System.out.print(kid.getId()+",");
    // kid = kid.getRight();
    // }
    while ( n > 1) {
    if (count == 3) {
    c.delKid(kid);
    //System.out.print(kid.getId()+",");
    count = 0;
    n--;
    } else {
    //System.err.print(kid.getId()+",");
    }

    kid = kid.getRight();

    count++;
    }
    System.out.println(kid.getId());
    }

    public Circle(int circleSize) {//表示要构造一个多大的圈
    for (int i=0;i<circleSize;i++) {
    Kid kid = new Kid(i+1);
    if (i==0) {
    this.setFirst(kid);
    this.setLast(kid);
    kid.setRight(kid);
    kid.setLeft(kid);
    size++;
    } else {
    addKid(kid);
    }
    System.out.print(kid.getId()+",");
    }
    System.out.println();
    }

    public void addKid(Kid kid) {
    last.setRight(kid);
    kid.setLeft(last);
    kid.setRight(first);
    first.setLeft(kid);
    this.setLast(kid);
    size++;
    } public void delKid(Kid kid) {
    kid.getLeft().setRight(kid.getRight());
    kid.getRight().setLeft(kid.getLeft());
    size--;
    }

    public Kid getFirst() {
    return first;
    } public void setFirst(Kid first) {
    this.first = first;
    } public Kid getLast() {
    return last;
    } public void setLast(Kid last) {
    this.last = last;
    } public int getSize() {
    return size;
    } public void setSize(int size) {
    this.size = size;
    }
    }package com.zhangyilin.count3quit1;public class Kid { private int id;//用于记录最后剩下的孩子是谁
    private Kid left;
    private Kid right; public Kid(int id) {
    this.id = id;
    }

    public Kid getLeft() {
    return left;
    } public void setLeft(Kid left) {
    this.left = left;
    } public Kid getRight() {
    return right;
    } public void setRight(Kid right) {
    this.right = right;
    } public int getId() {
    return id;
    } public void setId(int id) {
    this.id = id;
    }}