求约瑟夫问题思路

来源:百度知道 编辑:UC知道 时间:2024/06/22 08:26:05
k个好人和k个坏人站成一圈(k个好人站在一起,k个坏人站在一起),从第一个好人开始数数,每次数到m就把那人杀掉,然后从下一任开始数数。要确定一个最小的m,使得在第一个好人被杀之前,k个坏人已经被杀死
例:
输入:3
输出:5

m从k+1开始向后迭代
用数组a[2*k]存人,1为好人0为坏人,num存剩余人数,loc存当前位置
确定下一个人用a[(loc+m)%num](具体你再算算),若要杀的人是1则看num,num==k说明此m成功

定义一个链表的数据结构就OK了啊

之前写了一个C++的 贴在下面 希望对你有帮助

======================================================================

#include<iostream>
#include<iomanip>
using namespace std;

//n个人围成一圈,依约瑟夫环指定的方法报数,直直所有人全部出列为止。
//求出出列顺序

//定义元素类型、结点类型和指针类型

typedef struct Lnode

{

int data;

Lnode *next;

}LNode,*LinkList; //结点类型、指针类型

void CreatList(LinkList &L,int n); //函数原型
void Show(LinkList L,int arry[20]);

int main()

{

int n=0,i=0;

LinkList L;

cout<<"请输入人数n:"<<endl;

cin>>n;

CreatList(L,n);

int code[20];

cout<