C++Josephus问题

/*
    Josephus问题 -- n个人围成一圈,按顺序数数,每次第m个人出局,求最后一个
    Wirtten by: nick
    Date: 2012-10-18 19:56
*/

#include <iostream>
#include <iomanip>

using namespace std;

struct node
{
    int item;
    node *next;
    node(int x, node* t)
    {
        item = x;
        next = t;
    }
};

typedef node *link;

int main()
{
    int n,m;

    n=9;
    m=5;

    link t = new node(1, 0);
    t->next = t;
    link x = t;
    for(int i=2; i<=n; i++)
        x = (x->next = new node(i, t));

    link tmp;
    while(x != x->next)
    {
        for(int i=1; i<m; i++)
            x = x->next;

        cout << setw(5) << x->next->item;   //输出每次淘汰的结点

        tmp = x->next;
        x->next = x->next->next;
        delete tmp;
    }

    cout << endl << x->item ;   //只剩一个节点


    return 0;
}
posted @ 2012-10-18 21:03  wouldguan  阅读(951)  评论(0编辑  收藏  举报