数圈算法
⑴ 有100个人按序号排好围成一个圈,从一号开始依次报1,2,3。然后把报3的人拿出来,在继续
约瑟夫问题。属于数据结构的典型例题。具体的肢物实现算法可以使用循环链表来完成,无论是JAVA还是唤埋C/C++,只是实现工具而已,如果需要C代码,可以提供C代码
补充,100个人里面,报3的出列,历链液然后依次循环,最后留下的是91号
⑵ 有N个人围成一环形圈,第一个人从1开始报数,报道M的人出列,直到最后一个同学,请写出算法。
经典的约瑟夫环问题
设n个人围成一圈,标号为0..n-1,从第一个人开始依次从1到k循环报数,当报到k的
时候此人出圈。设J(n,
k,
i)表示第i个出圈的人的标号。
定理一:
J(n,
k,
1)
=
(k-1)
MOD
n,
(n>=1,
k>=1)
…………
(1)
证明:由定义直接得证。
定理二:
J(n+1,
k,
i+1)
=
(k
+
J(n,
k,
i))
MOD
(n+1),
(n>=1,
k>=1,
1<=i<=n)
………
…
(2)
证明:
设g
=
J(n,
k,
i),因此如果有n个人,从0开始报号,第隐世i个出圈的标号为g。现在考
虑J(n+1,
k,
i+1),灶清肢因为J(n+1,
k,
1)
=
(k-1)
MOD
(n+1),即第一步的时候删除数
字(k-1)
MOD
(n+1),第二步的时候从数字k开始数起。因而问题变为了找到剩下的n
个数字中从k开始数起被删除的第i个数字(注意这时(k-1)
MOD
(n+1)已经被删除了)
,而这恰好就正咐是(g+k)
MOD
(n+1),(2)成立。
根据(2),很容易求得n个数里面第i个出圈的数。
就根据这个定理递推计算吧!
⑶ 各种类型弹簧有效圈数的详细计算方法
各种类型弹簧有效圈数的详细计算方法:
有效圈数是指弹簧能保持相同节距的圈数。弹簧有效圈数=总圈数-支撑圈,具体根据结构进行计算。
1、对于拉伸弹簧,有效圈数n=总圈数n1,当n>20时圆整为整数圈,当n<20时圆整为半圈。
2、对于压缩弹簧,有效圈数n=总圈数n1-支撑圈数n2,n2可查表获得。尾数应为1/4、1/2、3/4、或整圈。
我们的通俗算法是压簧总圈数减掉上下接受接触不会产生变形的圈数,一般减2圈;扭簧和拉簧的有效圈数就是总圈数。
拓展资料
弹簧是一种利用弹性来工作的机械零件。用弹性材料制成的零件在外力作用下发生形变,除去外力后又恢复原状。亦作“ 弹簧 ”。一般用弹簧钢制成。弹簧的种类复杂多样,按形状分,主要有螺旋弹簧、涡卷弹簧、板弹簧、异型弹簧等。
注意问题
由于受产品结构限制,多股簧一般具有强度高、性能好的特点。要求其材料在弹簧强度和韧性上对最终性能予以保证。多股簧在加工过程中,应注意的是:
1、支承圈根据产品要求可选用冷并和热并两种方法。采用热并方式不允许将簧加热至打火花或发白,硅锰钢温度不得高于850℃。支承圈与有效圈应有效接触,间隙不得超过圈间公称间隙的10%
2、多股簧特性可由调整导程决定,绕制时索距可进行必要调整。拧距可取3~14倍钢丝直径,但一般取8~13倍为佳。其簧力还与自由高度、并端圈、外径及钢丝性能等有密切关系,可通过调整其中某项或几项予以改变。
3、不带支承圈的弹簧和钢丝直径过细的弹簧不应焊接簧头,但端头钢索不应有明显的松散,应去毛刺。凡需焊接头部的多股簧,其焊接部位长度应小于3 倍索径(最长不大于10毫米)。加热长度应小于一圈,焊后应打磨平滑,气焊时焊接部位应进行局部低温退火。
4、弹簧表面处理一般进行磷化处理即可,也可进行其它处理。凡要进行镀层为锌与镉时,电镀后应进行除氢处理,除氢后抽3%(不少于3件)复试立定处理,复试中不得有断裂。弹簧应清除表面脏物、盐痕、氧化皮,方法可采用吹砂或汽油清洗的办法,但不能采用酸洗。
5、重要弹簧紧压时间为24小时,普通弹簧为6小时或连续压缩3~5次,每次保持3~5秒。紧压时弹簧与芯轴的间隙以芯轴直径的10%为宜,间隙过小则难于操作,间隙过大则易使弹簧发生弯曲变形。紧压时若其中一件弹簧折断,则其余应重新处理。
⑷ 算法:100人围圈,数到14退出,从1开始继续数
有余乱卖100个人陪凯围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新 开始,从1报数,到14退出。问:最后剩下的是100人竖逗中的第几个人?
⑸ floyd判圈算法
问题:如何检测一个链表是否有环,如果有,那么如何确定环的起点.
要求 : 空间复杂度为O(1), 时间复杂度为O(n).
假设一个有环链表如下图: 利用floyd判圈算法可以做到下面的三件事:
使用两个指针slow和fast。两个指针都从链表的起始处S开始。slow每次向后移动一步,fast每次激厅向后移动两步。若在fast到达链表尾部明慎隐前slow与fast相遇了,就说明链表有环。
这里可以简单的证明一下:反证法,假如没有环,那么slow永远追不上fast,那么在fast到达链表尾部前slow不会fast相遇了。若相遇了,链表就有环。
当slow和fast相遇时,slow和fast必定在环上,所以只要让一者不动,另一者走一圈直到相遇,走过的节点数就是环的长度。
如图所示,设AB=n, SA=m。设环的长度为L。
假设slow走过的节点数为i,那么有:
i = m + n + a L a为slow绕过的环的圈数。
因为fast速度为slow的两倍,所以相同时间走过的节点数为slow的两倍,所以有:
2 i = m + n + b L b为fast绕过的环的圈数。
两者做差有 : i = (b-a) L。
所以可知,fast和slow走过的距离是环的整数倍。
所以有m+n=L。
所以此时让slow回到起点S,,fast仍然在B。
让两个指针以每次一步的速度往前走。
当走了m步时,可发现slow和fast正好都在A处,即是环的起点。
floyd判圈算法是一个很有趣的算法,在某些题目上用处很大,比如下面这个孝闭。
给出一个数组 nums 包含 n + 1 个整数,每个整数是从 1 到 n (包括边界),保证至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
注意事项
对于这个题目
⑹ 在狂欢节的套圈游戏中,三个圈可以套在三个桩上。圆圈套在a桩上得1分,套在b桩上得3分,套在c桩上得5分。
方法一:数字算法:
由于3个数字都腊答为奇数,其和为奇数,最小为轮手慧1+1+1=3,最大为5+5+5=15,
所以一共有得分 3,5,7,9,11,13,15 七种得分。
方法二:薯此罗列全部套圈有10种情况:
AAA(3);BBB(9);CCC(15);AAB(5);AAC(7);
BBA(7);BBC(11);CCA(11);CCB(13);ABC(9);
从上可见,得分有 3,5,7,9,11,13,15 七种情况。