acm 约瑟夫环问题假设有2k个人围着一个圆桌坐着,前k个是好人,后k个是坏人 .现在开始,每m个人踢掉一个,比如有6个人,m=5,那么,被踢掉的人依次是5,4,6,2,3,1.现在要求,在踢掉第一个好人前,必需把

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 01:31:13
acm 约瑟夫环问题假设有2k个人围着一个圆桌坐着,前k个是好人,后k个是坏人 .现在开始,每m个人踢掉一个,比如有6个人,m=5,那么,被踢掉的人依次是5,4,6,2,3,1.现在要求,在踢掉第一个好人前,必需把

acm 约瑟夫环问题假设有2k个人围着一个圆桌坐着,前k个是好人,后k个是坏人 .现在开始,每m个人踢掉一个,比如有6个人,m=5,那么,被踢掉的人依次是5,4,6,2,3,1.现在要求,在踢掉第一个好人前,必需把
acm 约瑟夫环问题
假设有2k个人围着一个圆桌坐着,前k个是好人,后k个是坏人 .现在开始,每m个人踢掉一个,比如有6个人,m=5,那么,被踢掉的人依次是5,4,6,2,3,1.现在要求,在踢掉第一个好人前,必需把所有的坏人踢掉,问,给定一个k,求满足这个要求的最小的m.
设 a[n] 为第n次踢掉的人,则
a(n) = [a(n-1)+m-1]mod(2k-n+1)
这儿为什么是a(n-1)+m-1而不是a(n-1)+m

acm 约瑟夫环问题假设有2k个人围着一个圆桌坐着,前k个是好人,后k个是坏人 .现在开始,每m个人踢掉一个,比如有6个人,m=5,那么,被踢掉的人依次是5,4,6,2,3,1.现在要求,在踢掉第一个好人前,必需把
a(n) = [a(n-1)+m-1]mod(2k-n+1)这个公式给出的a(n),是当次的序号,而不是总序号.用这个公式推导出的被踢掉的人依次是5,4,4,2,2,1.和总序号5,4,6,2,3,1是相符合的.
多减1,是因为,这个人被踢走了后,后面的人会补上来.如果不减这个1,则导致多数1个人.例如,第一次5号被踢掉,然后6号就变成了新5号,总人数从6变成5,此时,如果还向后数5的话,就数到了10,[]mode 5 后得到5,显然不正确.减去1的话,则第2轮数到新4号.
下面的代码,对k从1到100,求满足条件的最小的m.结论是:
k = 1, m = 2
k = 3, m = 5
其他的k,都无满足条件的m.
#include
// 给定k,m,返回第n轮出局的人的序号
int a( int k, int m, int n )
{
if ( n == 0 )
return 1;
else
{
int pre = a( k, m, n - 1 );
int now = ( pre + m - 1 ) % ( 2 * k - n + 1 );
if ( now == 0 )
now = 2 * k - n + 1;
return now;
}
}
// 给定k,测试m是否合格(是否能保证坏人先出局)
bool is_m_good( int k, int m )
{
for ( int n = 1; n

acm 约瑟夫环问题假设有2k个人围着一个圆桌坐着,前k个是好人,后k个是坏人 .现在开始,每m个人踢掉一个,比如有6个人,m=5,那么,被踢掉的人依次是5,4,6,2,3,1.现在要求,在踢掉第一个好人前,必需把 vb求约瑟夫问题的求解:有n个人围成一个圈,由第一个人开始报数,数到第k个人,这个人 在控制台下实现约瑟夫环.编号为1,2,3,……,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码一、问题描述 在控制台下实现约瑟夫环.编号为1,2,3,……,n 的 n 个人按顺时针方向围坐一圈,每 用数据结构的单循环链表写的约瑟夫环(C语言),哪错了?约瑟夫环 问题描述:约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持一个密码(正整数).一开始任选 ACM约瑟夫环数学问题1,2,3,4...n(n后面是1)的一个循环1,2,1,2...的喊每次喊到2的除去,剩下的继续喊直到只剩一个数字.有一个数学原理比如说n=10,10的二进制是1010,右循环下也就是0101,那么101就是 How to solve 约瑟夫问题 by C++ ?约瑟夫问题:设编号为1,2,…,n的n(n>0)个人按顺时针方向围坐一圈,每人持有一正整数密码.开始时任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1 C语言程序设计题 做出一题就可以啦………………综合实验二 约瑟夫环问题 1.实验说明 已知n个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围.从编号为k(1 k n)的人开始报数,数到m的 采用链表解决约瑟夫问题:有n个人围坐在一起形成头尾相接的一个环,从第m个人开始报数,每次有人数到r时,这个人就离开.请输出所有人的离队顺序. 分别用数组和链表实现约瑟夫环.约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值m,从第一个人 约瑟夫环问题,急!题目要求-所用的单循环链表中不需要“头结点”,我不会,请教各位高手!约瑟夫环问题 [问题描述]编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人持有一个密码(正 数据结构试验设计上老师提出了一个问题,关于线性结构的应用,约瑟夫环问题 小弟才疏学浅,约瑟夫问题的一种描述是:编号为1,2,...,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正 约瑟夫环(Joseph)问题数据结构的实验.c++编程~约瑟夫环(Joseph)问题的一种描述是:编号为1,2,…,n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数 求数据结构算法!急用!1、 约瑟夫环问题约瑟夫问题的描述是:编号为 1,2,----,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始人选一个正整数作为报数上限值m,从第一个 约瑟夫斯问题谁知道? 约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺时针方向围坐一圈,m为任意一个正整数.从第一个用C++怎么实现,求助…… 大神能给出约瑟夫环问题的解题思路吗? 约瑟夫环问题,用C语言写要有注释, 谁能用循环队列的数据结构解决约瑟夫环问题?