線性表應用--Josephus問題的解法(Python 版)

來源:互聯網
上載者:User

標籤:方式   現在   鏈表   col   處理   線性   處理過程   ...   順序表   

線性表應用

           --Josephus問題的解法(Python 版)

Josephus問題描述:假設有n個人圍坐一圈,現在要求從第k個人開始報數,報到第m個數的人退出。然後從下一個人開始繼續報數並按照相同的規則退出,直到所有人退出。要求按順序輸各出列人的編號。  

  1. 基於數組概念解法

    1. 建立一個包含n個人的表
    2. 找到第k個人,從那裡開始
    3. 處理過程中採用吧相應元素修改為0的方式表示已經退出,反覆做:
    4. 數m個(尚在坐的)人,遇到表的末端轉回到下標0繼續
    4. 把表示第m個人的表元素修改為0
    5. n個人出列表示結束

     1 def josephus(n,k,m): 2     people = list(range(1,n+1))  # 初始化,序列標號 1,2,3,...,n 3     i = k - 1  # i 記錄了第k個人的下標 4     for num in range(n):  # 迴圈n次 5         count = 0 6         while count < m : 7             if people[i] > 0:  # 跳過 已經退出的人 8                 count += 1 9             if count == m :  # 這裡注意: i還沒+110                 print(people[i], end="")11                 people[i] = 012             i = (i + 1) % n   # 控制 i 的迴圈13         if num < n + 1 :14             print(", ",end="")15         else :16             print("")
  2. 基於順序表的解法 

    利用列表的性質,彈出報數為m的人

    1 # 利用列表的性質,彈出報數為m的人2 3 def josephus_L(n,k,m):4     people = list(range(1,n+1))5     num , i  = n , k-16     for num in range(n,0,-1):7         i = (i + m - 1) % num  # 報數m的人的下標8         print(people.pop(i),end="") # 報數第m個數的人彈出後 i 自動指向下一個9     return
  3. 基於迴圈單鏈表的解法


線性表應用--Josephus問題的解法(Python 版)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.