约瑟夫环算法研究

约瑟夫环递归算法详解与实现 迭代算法通过循环来模拟报数和淘汰的过程,避免了递归调用的额外开销,并在实际应用中通常具有更好的性能表现。约瑟夫环问题是一个著名的理论问题,其背景是在古罗马时期,有n个犯人被围成一个圈,从第一个人开始报数,每次报到m的人将被处决,然后从下一个人开始重新报数,直到所有人都被处决。有n个人围成一圈,从第一个人开始报数,每次报到m的人将被淘汰出局,然后从下一个人开始重新报数,直到最后只剩一个人为止。假设我们知道在n-1个人中,谁是幸运者(即他在子问题中的序号),那么我们可以通过这个信息来找出在n个人中谁是幸运者。 阅读详情
今天在优快云论坛上看到这个问题:
500个小孩围成一圈,从第一个开始报数:1,2,3,1,2,3,1,2,3,……每次报3的小孩退出
问最后剩下的那个小孩,在以前500人里是第几个???

用LinkedList模拟报数和删除行为,算出最终结果是436。但是当总人数特别大时,此算法效率就非常低。

import java.util.*;
class Test{
    public static void main(String[] args){
        List<Integer> list = new LinkedList<Integer>();
        for(int i = 1; i <= 500; i ++){
            list.add(i);
        }
        int index = 2;//第一个报到3的小孩,索引是2
        while(list.size()> 1){
            list.remove(index); 
            index = index - 1;//移除该位元素后,下次需要从该位开始遍历,故减1
            index = (index +3)%list.size();
        }
        System.out.println(list.get(0));

    }
}


回帖里有人提及这是约瑟夫问题,于是百度了一下,找到一般性的问题描述:
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,求最后一个出列人的编号。

在写算法思路之前,先记录自己做题时走过的弯路:
先假设m,n均为正整数,m%n和(m-1)%n+1,这两个式子在大部分情况下是等效的,但是当m为n的倍数时,前一个式子的值是0,后一个式子的值是n。


下面讲此题思路:
题中第k人开始报1,则第(k+m-2)%n+1人报到m出列,接下来第(k+m-1)%n+1继续开始报1。一共n-1个数次序为:
(k+m-1)%n+1, (k+m)%n+1, (k+m+1)%n+1……(k+m-3)%n+1  ①
调整次序,使第一个数的次序仍为k:
k, k+1, k+2,……k-2 ②
可见问题转化成为n-1人时的约瑟夫环。假设此时最后一个出列的人的编号为f(n-1),那么将它作一个逆向变换就可以得到n人约瑟夫环的解:
f(n) = [f(n-1)+m-1]%n+1
由于n是题设中的最大人数,将它换成其他变量以免混淆:
f(i) = [f(i-1)+m-1]%i+1
由于始终是第k人开始报1,那么当总人数为1时,f(1)=k。据此可写出迭代或递推算法。
以下是迭代算法:
 public int fun(int n, int m, int k){
        int result = k;//当总人数为1时,
        for(int i = 2; i <= n; i++){
            result = (result + m - 1) % i + 1;
        }
        return result;
    }

约瑟夫环算法详解 约瑟夫环指的是,n个人按编号顺序围成一个环,设置一个数字m,其中m&lt;n(一般m取0-9之间的数);并从环中的第一个人开始,按顺时针数数,每数了m个位置,排在m号的位置上的人出列,然后从出列的位置的下一个位置上的人开始数,一直到环中剩下最后一个人为止。算法步骤:(1)确定存储结构:由于是一个环,所以建立一个循环链表(2)设置指针个数:设置一个头指针*front永远指向第一个结点(按数字顺序的话... 阅读详情

相关推荐

C++实现约瑟夫环问题代码详解

约瑟夫环问题,又称为约瑟夫斯问题(Josephus Problem),是计算机科学和数学领域中一个著名的理论问题。该问题源于一个历史传说:古代犹太历史学家约瑟夫与同伴被困于一个洞穴中,他们决定通过一个残酷的规则来确定谁将与敌人战斗至死,以保留其他人生还的机会。规则如下:他们围成一个圈,从某个人开始计数,每数到第三个人,该人就必须出列,接着从下一个人开始继续计数,直到只剩下一人。虽然这个问题听起来充满了残酷与悲伤,但它实际上是一个在计算机算法与数学上具有深远意义的模型。

weixin_36328210的博客 1174

约瑟夫问题_公式原理详解

每次增加一个人,我们第一轮的报数被指定的必定是新加入的人。

小黯 3万+

C#实现约瑟夫环问题算法详解

本文还有配套的精品资源,点击获取 简介:约瑟夫环问题是一个理论问题,涉及一组围成圈的囚犯,按照一定规则进行计数,被数到的囚犯将被剔除,直至最后剩下一个囚犯。在C#中,我们可以通过循环数组的解决方案来实现这一算法,通过模拟整个剔除过程来找到最后存活的囚犯。本文将介绍基于循环数组的约瑟夫环问题算法实现,并提供相应的C#代码示例。此算法对于提高编程逻辑思维和算法实现能力非常有帮助...

weixin_42587866的博客 1327

约瑟夫环问题 —— 算法

约瑟夫环问题前言约瑟夫环问题一约瑟夫环问题二约瑟夫环问题三约瑟夫环问题四约瑟夫环问题五约瑟夫环问题六约瑟夫环问题七约瑟夫环问题解决一 —— 模拟队列约瑟夫环问题解决二 —— 环形链表约瑟夫环问题解决三 —— 动态规划 前言 今天在浏览技术文章时看到的这么一个问题,感觉甚是有趣,专门来研究研究下,在浏览众多关于约瑟夫讲解的文章后,便进行一个较为详细的总结。 约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法中,类似问题又称为约瑟夫环,又称“丢手绢问题”。约瑟夫问题在各大刷题网站有各种各

༄༊星河༣ 6308

银河麒麟V10搭建vsftpd

1、查看是否有安装过2、安装3、服务启动步骤设置开机启动并此次立即启动启动重启停止查看状态4、系统防火墙放行ftp服务如果没有重要的数据在服务器里面,或者在本地虚拟机中外网无法访问的情况下,建议直接关闭防火墙即可省略以上繁琐的步骤。

hhq850741642的博客 6484

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.youkuaiyun.com/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

可视化讲解:什么是约瑟夫环?

前言 概念介绍 1. 基本概念 约瑟夫问题,有时也称为约瑟夫斯置换,是一个计算机科学和数学中的问题。在计算机编程算法中,类似问题被称为约瑟夫环,又称丢手绢问题。 2. 问题来历 据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀.

多米学算法的博客 4129

因果推断综述-A Survey on Causal Inference

最近读到一篇讲述很全面的综述文献-《A Survey on Causal Inference》,对于接触因果推断不久的同学而言是特别详细的介绍和科普。文献很长,我会分成几部分介绍。 目录 摘要 第一部分:简介 第二部分:因果推断基础知识 第三部分:基于三种假设的因果推断方法 第四部分:实验 第五部分:应用 摘要 几十年来,因果推理是一个跨许多领域的关键研究主题,如统计、计算机科学、教育、公共政策和经济学。与随机对照试验相比,研究方向由于可用数据量大且预算要求低,如今,从观测数据..

海边凝望的博客 3182

算法--约瑟夫环(一)

老大昨天给了我一道面试题——实现约瑟夫环,说实话,当时就懵逼了,学了好长时间的算法,都没有怎么总结过,上来就来这个,有点儿难度啊(给了我十五分钟),下边我开始我的表演。   这道问题是从一个传说中来的,据传说,在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开

风吹过的地方 797

华为OD机试 - 最快到达医院的方法(Python/JS/C/C++ 2024 E卷 100分)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2169

禾赛激光雷达AT128P/海康相机(1):ROS环境设备驱动

sudo cp *.so /opt/MVS/lib/64/ # 复制当前文件夹中所有.so文件 到 “/opt/MVS/lib/64/” 文件中。将相应的.so文件复制到 /opt/MVS/lib/64/。我解压的是x86_64的,解压之后,打开,再解压MVS。然后在上一层,也就是选择x86_64那一层打开终端。新建一个工作空间,或者打开自己的工作空间。)包放在src内,并解压,然后编译。MVS V2.1.2下载之后解压,// 驱动代码下载到src文件里面。// 特定文件夹中打开终端。

努力努力努力 882

经典算法--约瑟夫环问题的三种解法

约瑟夫环问题,这是一个很经典算法,处理的关键是:伪链表 问题描述:N个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,报到m的人出圈;如此往复,直到所有人出圈。(模拟此过程,输出出圈的人的序号) 在数据结构与算法书上,这个是用链表解决的。我感觉链表使用起来很麻烦,并且这个用链表处理起来也不是最佳的。 我画了一个图用来理解: 有如下问题需要首先考虑: 1、“圈...

飞鸿踏雪泥的博客 11万+

Unreal从入门到精通之如何绘制用于VR的3DUI交互的手柄射线

之前我写过一篇文章《Unreal5从入门到精通之如何在VR中使用3DUI》,其中讲到使用WidgetComponent和3DUI进行交互。然而,这种方法存在一个问题:为了让射线可视化,我们需要勾选“调试/显示调试”,这样才能在手柄上看到代表其指向的一条红色射线。但最关键的问题是,这个显示调试信息的功能只属于Debug调试模式,也就是说,一旦将项目正式打包发布,这条射线辅助线就没有了。如下图所示:我就觉得Unreal官方真的是有点过分了,这不应该是最基本的功能么?难道我们VR要在Debug模式下发布?

TxNet 1612

约瑟夫环问题C++代码实现:高效递归算法的精妙应用

约瑟夫环问题C++代码实现:高效递归算法的精妙应用 去发现同类优质开源项目:https://gitcode.com/ 项目核心功能/场景 解决约瑟夫环问题,找出最后剩下的人的编号。 项目介绍 在计算机科学领域,算法是解决问题的基础,而约瑟夫环问题(Josephus Problem)则是算法训练中常见的一个问题。它不仅考察编程者对递归算法的理解,还能锻炼逻辑思维能力。本项目提供了一个使用C++语言实...

gitblog_06715的博客 656

Codesys入门-新建工程+任务调用+编译+调试

程序组织单元(Program Organization Unit, POU)由声明区和代码区组成,是用户程序的最小软件单元,它相当于传统编程系统中的块(Block),按功能程序组织单元(POU)可分为函数(FUN)、功能块(FB)、程序(PRG)。:Codesys采用多任务的方式来执行用户程序的“任务”,而每个“任务”分配了不同的执行周期,有些全局变量可能要在不同的POU之间被访问和修改,于是需要对全局变量进行交互同步,也是在任务的“时间对准点”进行的,实例:声明了INT类型,变量名为输入;

刺客 1万+

开发simulink 以及stm32半物理仿真碰到的问题,以及处理方法,Error:External Mode Open Protocol Connect command failed(实测有用)

串口实现的,但是在测试的时候发现,这个串口可以正常发送和接收数据,但是一旦把这个串口只让其进行版物理仿真就报错。直接刷写程序是可以的,最后查到问题了。我要实现半物理仿真,就是通过matlab实现可以直接控制stm32板子,实际上是通过xcp on。然后点击simulink上的观测按钮就可以直接和stm32平台进行通讯了。3,还是使用串口3,但是重新需要设置一下com口,因为重新插拔了一下,按照这个设置方法就可以。2,重新加载ioc文件。

pvmsmfchcs的博客 1500

链队列约瑟夫环c++代码_这或许是你能找到的最详细约瑟夫环数学推导!

问题描述约瑟夫环问题是这样的:0, 1, …, n - 1 这 n 个数字排成一个圆圈,从数字 0 开始,每次从这个圆圈里删除第 m 个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4 这 5 个数字组成一个圆圈,从数字 0 开始每次删除第 3 个数字,则删除的前 4 个数字依次是 2、0、4、1,因此最后剩下的数字是 3。如下图所示。解法解决约瑟夫环问题,我们采用倒推,我们倒推出...

weixin_30984749的博客 540

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java算法

1.约瑟夫算法: 约瑟夫环:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的 人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出 列;依此规律重复下去,直到圆桌周围的人全部出列 demo下载地址!!!!!...

jhonjson的博客 237

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

约瑟夫环问题研究(二)

在上一篇文章中的最后代码是否还存在优化的地方呢? 仔细看一看,保存了游戏人的编号

糊一笑 681

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

约瑟夫环问题

一、问题描述 约瑟夫环问题是一个很经典的问题:一个圈共有N个人(N为不确定的数字),第一个人的编号为0或者1(两个都可以,看你的程序如何编写),假设这边我将第一个人的编号设置为1号,那么第二个人的编号就为2号,第三个人的编号就为3号,第N个人的编号就为N号,现在提供一个数字M,第一个人开始从1报数,第二个人报的数就是2,依次类推,报到M这个数字的人出局,紧接着从出局的这个人的下一个人重新开始从1报数,和上面过程类似,报到M的人出局,直到N个人全部出局,请问,这个出局的顺序是什么? 举一个简单的例子:假.

xiaoxi_hahaha的博客 11万+

Python算法经典:约瑟夫环

问题来历:据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行

weixin_61631131的博客 8401

九度题目1188:约瑟夫环

题目1188:约瑟夫环 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1500 解决:665 题目描述:     N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的 人再从1、2、3开始报数,报p的人再退出圈外,以此类推。     请按退出顺序输出每个退出人的原序号。 输入: 包括一个整数N(1 输出: 测试数据

程序猿之洞 1902

【算法】约瑟夫环问题

链表算法篇

博客网站地址: https://arsenova.xyz 我会将优快云上的博客重修一部分迁移到网站上。 文章会做同步更新,但我不会在这个糟糕的平台多待1秒。下面是我要说的话,save your time. keep going 1390

数据结构:约瑟夫环

约瑟夫环原理运作如下: N个人围在一起坐成环状 从K编号开始报数 数到某个数M的时候,此人出列,下一个人重新报数 一直循环,直到所有人出列,约瑟夫环结束 joselooplink.c(编译环境: Ubuntu18.04 ,Vim) #include <stdio.h> #include <stdlib.h> typedef struct node ...

不秃头的程序猿Gabriel的博客 1万+

算法科普:什么是约瑟夫环

1 问题描述 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知 n 个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人...

程序员吴师兄的博客 1万+
上一篇: 在Sublime Text 3中配置编译和运行Java的两个方法
下一篇: 遍历Map的四种方法
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值