數圈演算法
⑴ 有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 七種情況。