
正文
java约瑟夫问题代码,java约瑟夫环实验报告
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
约瑟夫问题
=26,它可以连续被2整除6次,是从1到64中能被2整除次数最多的数,因此,最后必然把64 号留下。如果有65名战士被俘,敌人还是按上述的方法残杀战士,最后还会剩下约瑟夫斯吗?经过计算,很容易得到结论,不是。
下午和朋友聊天的时候,有朋友提到了约瑟夫环问题。你和另外 n-1 个人围成一个圈,按 1,2,...,n 依次编号。第一个人从 1 开始报数,数到 k 的人会被杀掉,然后下一个人重新从 1 开始报数。
解决这道题可以采用模拟报数的方法,建立一个大小为N的数组,数组的第N个元素表示第N个人是否还在队伍中,首先将每个元素都置为1,表示全员都在队伍中。如果第N个人出队,则将第N个元素置为0。
相关问答
Q1: 【基础】约瑟夫问题
编上号码1,2,3,……64。敌人把1号杀了,又把3号杀了,他们是隔一个杀一个这样转着圈杀。
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。
约瑟夫问题:Joseph问题的一种描述是:编号为……、n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
Q2: 编程:n个人围一圈,按1至n编号。
1、设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。
2、for(p=a;n==1;p++){ cnt++;if(cnt==6) //? 按你的意思,这个应该是 cnt==m吧?{ del(a,n,*p);n--;cnt=1;printf(号码为%d的人退出了圈子。
3、n=1+(N-2^[log(2,N)])*2,[]为向下取整 过程:当第一个人被踢出去时,把剩下的人重新编号,问题就相当于N-1个人的:原来的1号变成N-1号,剩下的新号等于原来的号-2。
Q3: 约瑟夫问题的一般形式
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。
约瑟夫(Joeph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。
这就是数学上有名的“约瑟夫问题”。给大家一个提示,敌人从l号开始,隔一个杀一个,第一圈把奇数号码的战士全杀死了。剩下的32名战士需要重新编号,而敌人在第二圈杀死的是重新编排的奇数号码。
约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,..n分别表示)围坐在一张圆桌周围。
Q4: 用java解决约瑟夫问题
1、Java约瑟夫问题: n个人(不同id)围成一个圈,从startId(任意数)个开始报数m(任意数)个数,数m的人出列排成新队列,m清零,然后又从下一个人开始数m个数开始,数到m就出列接在新队列尾部,如此重复,知道所有人都出列为止。
2、这个就是约瑟夫环的问题,JAVA程序写法如下,一眼明了,你去搜索一下“约瑟夫环”,会明白很多。
3、你的remove方法不对,你的方法每次删掉的是从head开始第m个位置的节点,但约瑟夫环需要的是要删掉每次循环数到m的位置的节点。remove方法可以去掉,再把out方法改一下就可以了。
关于java约瑟夫问题代码和java约瑟夫环实验报告的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







