约瑟夫问题描述:编号为1~N的N个人围顺时针方向坐一圈,每人手持一个密码(正整数),开始选一个正整数作为初始报数值m,从第一个人开始报数,报到第m个人时停止报数。报m的人出列,公布他手中的密码作为新的m值,然后从下一个开始报数,直到所有人全部出列为止。
思路:该问题用循环链表的方法很容易解出,具体见如下代码:
//====================================================================
// this program resolved a Josephus loop problem
// Achieved by a loop-list
// if you have any questions, welcome to chat with me
// QQ:88521134 Email:88521134@qq.com
//====================================================================
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef struct node
{
int data;
node* next;
}node;
//========================================================================
// node* loop_create(int a[], int n): use an array to create a loop-list
// int a[]: array
// int n: the number of elements