看到一個面試的演算法題:有50個人圍成一個圓做遊戲【假如序號依次為1-50】,從第一位開始報數(數字從1開始報數)
直到報數的數字是3或者3的倍數時,則這個人退出遊戲,請問最後剩下的是序號是幾?
想了一會兒我是算不出來,最終還是藉助程式計算了一下。
哪位大佬講解下演算法?
PS:我的思路,定義個1-50 List列表分別表示50個人。定義為一個變數z ;用來指向List //例如:List[z]定義為一個變數y ;用來報數初始值從1 開始 (1,2,3....51,52,.....)做while迴圈,當 y除以3餘數為0 時,把List對應的值改成0【這裡一開始是想把對應List某個值移除的,後來發現這樣做會更復雜。把它設定成0,好處是這個List總長度就不會變了】當變數z值>49時就表示LIST資料取到最後了,並重新設定z=0;繼續取List[z]的值變數y繼續+1【51,52...】需要注意的是當LIST某個值是0的時候則變數y不需要做處理,只要變數z繼續+1
while 的條件是 List列表裡 大於0的值的數量 大於 1 ,當LIST裡面只有一個值是大於0的時候則這迴圈就可以退出了,LIST裡面的那個值就是最後剩下的那個序號值。
最新評論