约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
#include <iostream>
using namespace std;
struct node
{
int data;
node *next;
};
const int N = 1000;
int main()
{
int num;
cin >> num;
if (num>1000)
num = 1000;
node *head = new node;
head->data = 0;
head->next = NULL;
node *p = head;
for (int i = 1; i<num; i++)
{
node *tmp = new node;
tmp->data = i;
tmp->next = NULL;
head->next = tmp;
head = head->next;
}
head->next = p;
while (p != p->next)
{
p->next->next = p->next->next->next;
p = p->next->next;
}
cout << p->data << endl;
return 0;
}