一、问题描述
.......
二、问题分析
.......
三、程序1:基于简单数组
// Josephus.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int n, m;//n参与活动的人数,m计数值
cin >> n >> m;
cout << n << " " << m << endl;
int* a = new int[n];
for(int i=0; i<n; ++i)
a[i] = i+1;//设置编号
int s = n, k = -1, j = -1; //
while(s != 1) //一直传递,直到最后一个人为止
{
while(k != m)
{//寻找下一个出局者
do{
j = ++j % n;
}while(a[j] == 0);//找到下一个参与者
++k;
}
cout << a[j] << endl;
a[j] = 0;//出局者的编号清为0
k = -1;
s -= 1;
}
cout << "Winner: ";
do{
j = ++j % n;
}while(a[j] == 0); //最后一个为获胜者
cout << a[j] << endl;
delete[] a;
return 0;
}
四、程序2:基于循环链表
........
分享到:
相关推荐
用顺序链表,单链表,静态链表三种结构求解的约瑟夫josephus问题,完整的代码,可以直接编译,运行的,
本文给大家分享了C++的编写约瑟夫(josephus)环函数。
java实现约瑟夫环问题Josephus 约瑟夫问题 * 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k(1,2,3...n)的人开始报数,数到m(1,2,3...)的那个人出列; * 他的下一个人又从1开始报数,...
2、 约瑟夫(Josephus)环问题:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m...
约瑟夫(Josephus)环问题:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m的人...
约瑟夫环2、 约瑟夫(Josephus)环问题:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时...
据说着名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1...
约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的...
Josephus 约瑟夫问题(POJ)相关习题的源代码(1012,2359,1781,2244,3517,2939,2800)
Josephus
Josephus 约瑟夫问题 实现 Josephus 约瑟夫问题 实现
一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部...
该文件是约瑟夫环(Josephus)问题的程序,程序简单,对同学们做这个程序的时候有据可依,很好的分析了这个问题的程序。
C语言数据结构解决josephus问题算法。用循环链表,
Josephus约瑟夫问题的循环链表实现.cpp
一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数报到m时停止。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列...