约瑟夫环数学最简单公式
时间: 2023-08-24 10:07:42 浏览: 144
约瑟夫环问题是一个经典的数学问题,假设有n个人围成一圈,从第一个人开始报数,每次报到m的人出圈,然后从下一个人重新开始报数,直到剩下最后一个人。最后留下的那个人的编号是多少?
可以用以下公式计算留下的人的编号:
f(n,m) = (f(n-1,m) + m) % n
其中f(n,m)表示n个人围成一圈报数,每次报到m的人出圈最后留下的人的编号。
当n=1时,f(n,m)=0;当n>1时,f(n,m) = (f(n-1,m)+m) % n。
这个公式可以通过递归或动态规划来实现。
相关问题
约瑟夫环的递推公式怎么理解
约瑟夫环问题是一个经典的数学问题,描述为:n个人围成一圈,从某个人开始报数,每报数到m的那个人出圈,直到最后只剩下一个人留在圈中。递推公式可以表示为:
f(1) = 0 (表示一个人留在圈中时的情况)
f(i) = (f(i-1) + m) % i (i>1,表示i个人留在圈中时的情况)
其中f(i)表示最后留下的人在这i个人中的编号。简单来说,递推公式的含义是:在剩下i个人时,第一个被淘汰的人在圈中的编号为 m % i,接下来每一次淘汰的人在圈中的编号都是相对于当前编号为m的人的m % (i-1)。由此递归推导可以得到最后留下的人在圈中的编号。
约瑟夫环Python简单基础
约瑟夫环是一种经典的问题,其具体描述为:有n个人围成一圈,从第一个人开始报数,报到m的人出圈,然后下一个人重新报数,再次报到m的人又出圈,直到所有人都出圈为止。请问最后剩下的人是谁?
以下是Python实现约瑟夫环的基本思路:
1. 将n个人用一个列表表示,列表下标从0到n-1。
2. 定义一个变量i表示当前的位置,初始值为0。
3. 循环进行如下操作,直到列表中只剩下一个元素:
a. 计数器j从1开始计数,如果j等于m,则将列表中i位置的元素弹出,并将i对应的值赋值为下一个位置(如果i已经是最后一个位置,则赋值为0)。
b. 如果j不等于m,则将i对应的值赋值为下一个位置(如果i已经是最后一个位置,则赋值为0),并将j加1。
4. 循环结束后,列表中只剩下一个元素,即为最后剩下的人。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)