約瑟夫環(huán)算法的Java實現(xiàn)代碼

字號:

相信大家都知道這是一個的算法問題,約瑟夫環(huán)的c語言實現(xiàn)是利用了指針鏈表的形式,java實現(xiàn)呢,我的這個是用了內(nèi)部類.
    算法描述:n個人圍成一圈,每人有一個各不相同的編號,選擇一個人作為起點,然后順時針從1到k數(shù)數(shù),每數(shù)到k的人退出圈子,圈子縮小,然后從下一個人繼續(xù)從1到k數(shù)數(shù),重復上面過程。求最后推出圈子的那個人原來的編號。
    程序實現(xiàn):
    public class JosephCircle {
     private class Node {
     public Node nextnode;
     public boolean flag;
     }
     private Node[] list;
     public JosephCircle() {
     list = new Node[30];
     int i;
     for (i = 0; i < 30; i++) {
     Node node = new Node();
     node.flag = true;
     if (i > 0) {
     list[i - 1].nextnode = node;
     }
     list[i] = node;
     }
     list[i - 1].nextnode = list[0];
     }
     public void start() {
     Node node = list[29];
     for (int i = 0; i < 135; i++) {
     if ((i+1) % 8 == 0) {
     node.flag = false;
     node.nextnode = node.nextnode.nextnode;
     } else {
     node = node.nextnode;
     }
     }
     }
     public void print() {
     Node node = list[29];
     for (int i = 0; i < 30; i++) {
     if (node.flag) {
     System.out.print("#");
     } else {
     System.out.print("@");
     }
     node = node.nextnode;
     }
     }
     public static void main(String[] args) {
     JosephCircle jc = new JosephCircle();
     jc.start();
     jc.print();
     }
    }