
正文
约瑟夫环算法js代码,约瑟夫环c++代码递归
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
约瑟夫环问题怎么解决啊?请用C语言写代码,谢谢!
约瑟夫问题:Joseph问题的一种描述是:编号为……、n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
//使用q为起始点 do{ i=0;//避免m减一后为零的问题 while(i!=m){ q=q-next;i++;} p=q-next;q-next=p-next;printf( %d,p-num);m=p-val;//你少了这一步。
约瑟夫环(很有名的数学问题)已知n个人(以编号1,2,..n分别表示)围坐在一张圆桌周围。
相关问答
Q1: 约瑟夫环公式是怎样推导出来的?
递推公式 f[1]=0;f[i]=(f[i-1]+m)%i; (i1)有了这个公式,我们要做的就是从1-n顺序算出f[i]的数值,最后结果是f[n]。
下午和朋友聊天的时候,有朋友提到了约瑟夫环问题。你和另外 n-1 个人围成一个圈,按 1,2,...,n 依次编号。第一个人从 1 开始报数,数到 k 的人会被杀掉,然后下一个人重新从 1 开始报数。
现在我们来看递推,由于为了方便表示(s+m)%i=0的情况,我们让第一人的编号为0,(从一开始也可以)。
这是个约瑟夫环逆问题 推导是这样的:为了讨论方便,先把问题稍微改变一下,并不影响原意:问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。
这里我们进行了重新编号。那么 (n-1)个人和 n个人之间的编号不一样的。
除非你能找到规律并总结出一个公式,每次调用该公式都能精确计算被Kill的人的编号。如果不行的话,就只能用一个标识来说明是否被Kill掉,我想用struct定义个结构体也是不错的选择。
Q2: 【生活处处皆算法】巧用约瑟夫环
1、从编号为k的人开始报数,数到m的那个人出圈;他的下一个人又从1开始报数,数到m的那个人又出圈;依次规律重复下去,直到剩余最后一个胜利者。例如:有10个人围成一圈进行此游戏,每个人编号为1-10。
2、约瑟夫环公式推导:已知n个人(以编号1,2,..n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列。
3、顺序存储形式线性表和链式存储形式线性表,非顺序物理存储结构。约瑟夫环问题,称为约瑟夫斯置换,是计算机科学和数学问题,在计算机编程算法中,此问题称为约瑟夫环也称丢手绢问题。
4、有了这个公式,我们要做的就是从1-n顺序算出f[i]的数值,最后结果是f[n]。
约瑟夫环算法js代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于约瑟夫环c++代码递归、约瑟夫环算法js代码的信息别忘了在本站进行查找喔。





