首页 > 试题广场 >

约瑟夫问题II

[编程题]约瑟夫问题II
  • 热度指数:9917 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

现有n个人围坐一圈,顺时针给大家编号,第一个人编号为1,然后顺时针开始报数。第一轮依次报1,2,1,2...没报1的人出局。接着第二轮再从上一轮最后一个报数的人开始依次报1,2,3,1,2,3...没报1的人都出局。以此类推直到剩下以后一个人。现给定一个int n,要求返回最后一个人的编号。

测试样例:
5
返回:5
头像 牛客64086195号
发表于 2020-04-01 14:13:45
算法知识视频讲解题目描述约瑟夫问题是一个著名的趣题。这里我们稍稍修改一下规则。有n个人站成一列。并从头到尾给他们编号,第一个人编号为1。然后从头开始报数,第一轮依次报1,2,1,2...然后报到2的人出局。接着第二轮再从上一轮最后一个报数的人开始依次报1,2,3,1,2,3...报到2,3的人出局。 展开全文
头像 Tomay
发表于 2025-02-15 01:03:27
class Joseph { public: int getResult(int n) { if (n == 1) return 1;//如果是一个人,直接输出 queue<int> myqueue; for (int i = 展开全文
头像 LegendaryGZ
发表于 2021-01-25 15:52:36
这题就是把没有喊道1的人删了就好了import java.util.*; public class Joseph { public int getResult(int n) { LinkedList<integer> arr=new LinkedList<> 展开全文
头像 Huster水仙
发表于 2023-01-12 22:34:52
约瑟夫问题|的思路链接 约瑟夫问题|链接 顺着约瑟夫问题|的思路: 循环的条件改变:不再是无脑取m个丢1个;每轮的筛选规则不一样,所以引入sum控制本轮循环次数,j表示报数的周期 第一轮筛选和后面的不同(被坑了):好好理解“接着第二轮再从上一轮最后一个报数的人开始”,第二轮开始,队列中的最后一个元 展开全文