约瑟夫环
问题描述:
m个人围成一个圈,指定一个数字n,从第一个人开始报数,每轮报到n的选手出局,由下一个人接着从头开始报,最后一个人是赢家。其中m>1,n>2。
链表法
用循环链表能完美契合本题
#include
using namespace std;
struct Node{
int data;
Node* next;
Node(int value){this->data = value;};
};
//创建一个约瑟夫环的类
class JosephCircle{
private:
Node* tail;//尾结点
//Node* eliminate;//淘汰结点
public:
JosephCircle():tail(NULL){}
~JosephCircle(){delete tail;}
void Add(int num);
void Eliminate(int step);
void Print();
};
void JosephCircle::Add(int num){
if(tail == NULL){
tail = new Node(num);
tail->next = tail;
}
else{
Node* new_node = new Node(num);
new_node->next = ta