约瑟夫环J***a语言代码,约瑟夫环j***a实现

kodinid 11 0

大家好,今天小编关注到一个比较意思的话题,就是关于约瑟夫java语言代码问题,于是小编就整理了3个相关约瑟夫环Java语言代码的解答,让我们一起看看吧。

  1. 让人蛋疼的约瑟夫环问题!有VB代码的更好,没代码的告诉我数学中怎么解?
  2. 约瑟夫环公式解析?
  3. 约瑟夫环的算法思路?

让人***的约瑟夫环问题!有VB代码的更好,没代码的告诉我数学怎么解?

建立一个数组a[i]表示第i号位是否在列中,初始值统一赋为1,当第i号出列时令a[i]=0然后就是不断循环,用一个变量n记录已经数了几个人了,每次令n=n+a[i]直到n=m为止

约瑟夫环公式解析

 

约瑟夫环Java语言代码,约瑟夫环java实现-第1张图片-安济编程网
图片来源网络,侵删)

常见的约瑟夫环公式为:

 

f(n,m)=((f(n-1,m)+m-1)\%n)+1,其中f(n,m)表示在有n个人,每m步淘汰一个人的情况下最后剩下的人的编号。

约瑟夫环Java语言代码,约瑟夫环java实现-第2张图片-安济编程网
(图片来源网络,侵删)

 

以下是对这个公式的简单解析:

 

约瑟夫环Java语言代码,约瑟夫环java实现-第3张图片-安济编程网
(图片来源网络,侵删)

当只有一个人时,显然这个人就是最后剩下的,即f(1,m)=1。对于有n个人的情况,我们可以先考虑n-1个人时的结果,然后在此基础上推导出n个人的情况。通过不断递归计算,逐步得到最终结果。“%n”表示取模运算,确保得到的结果在有效的编号范围内。

 

这个公式通过逐步递推的方式来求解约瑟夫环问题的最终。

约瑟夫环的算法思路?

约瑟夫环问题是一个古老的著名问题,现在我们使用链表来解决。我们首先使用循环链表来模拟这个环,然后从起点开始向后移动m-1步找到待删除节点,并将其删除。

接着又从删除节点的下一个节点开始重新计数,再次按照m-1的步骤删除,直到只剩下一个节点为止。最后,我们返回唯一剩下的节点即可。使用这种算法,我们可以有效地解决约瑟夫环问题,并且可以在O(nm)的时间复杂度下实现

到此,以上就是小编对于约瑟夫环J***a语言代码的问题就介绍到这了,希望介绍关于约瑟夫环J***a语言代码的3点解答对大家有用。

标签: 约瑟夫 代码 节点