本文首發於微信公衆號:"算法與編程之美",歡迎關注,及時瞭解更多此係列文章。
前言
標題,假如朋友圈分享了這篇文章,如何吸引朋友點擊打開這篇文章。
問題描述
一羣猴子圍成一圈,按1,2,3,…,m依次編號。
然後從第1只開始數,數到第n只,把它剔出去,再重新開始數,
如此不停的進行下去,最後剩下的那隻就是大王。
解決方案
題目分析:本題的核心思路是一個約瑟夫環算法,在一開始利用while循環將猴子一隻一隻取出來用i標號,再將i判斷是不是爲要剔除的數字,不剔除就加入一個新的列表等待下一次循環,並且將i繼續加1,一直循環到只有最後一隻猴子爲止.
def king(m, n): lt = list(range(1, m+1)) i = 0 while len(lt) > 1: monkey = lt.pop(0) i += 1 if i == n: i = 0 else: lt.append(monkey) return lt[0] m = int(input('請輸入猴子的總數:')) n = int(input('請輸入n的值:')) print(king(m, n)) |
結語
本週我們完成了一道java算法的題,用自己的想法解決了一下,後續我們也會對更多的題提出自己的解法。
實習編輯:王曉姣
作者:包文晴 於博 雷迅
稿件來源:深度學習與文旅應用實驗室(DLETA)
本文分享自微信公衆號 - 算法與編程之美(algo_coding)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。