1. 程式人生 > >Python 約瑟夫圈問題

Python 約瑟夫圈問題

lis eat clas 執行 一個人 utf-8 邏輯 輸入 num

  • 需求:有n個人圍成一圈,順序排號, 從第1個人開始報數(從1到3),凡報到3的人退出圈子,問最後留下的是原來第幾號的那位
  • 代碼邏輯
    • n個人,通過輸入參數n,生成一個長度為n的列表
    • 通過報數邏輯函數,只要數到3的就把那個位置相對應的列表值設置為0,同時留下的人數也要減1,直到剩下的人數為1,才退出循環
    • 通過報數邏輯函數,最後得到新的列表(只有一個值是1,其余都是0),進行循環即可
  • 代碼如下:
     1 #coding:utf-8
     2 #__author__ = ‘Diva‘
     3 # 用戶輸入n,n代表人數,圍成一圈,順序排號
     4 # 從第一個開始報數,1,2,3,數到3的人,退出圈子
     5
    6 # 報數邏輯,數到3的把對應的位置置為0,直到剩下最後一個人 7 def num_report(list_create): 8 n = 0 9 list_size = len(list_create) 10 number_stay = list_size # 剩下的人數(值為1的個數) 11 while not number_stay == 1: 12 for i in range(list_size): 13 if list_create[i] == 1: 14 n = n + 1 15
    if n == 3: 16 list_create[i] = 0 17 n = 0 18 number_stay = number_stay - 1 19 if i == list_size: 20 i = 0 21 22 # 通過報數函數最後生成的新的列表,遍歷,找到唯一一個值不是0的人 23 def remove_num_3(list_create): 24 num_report(list_create)
    25 print(經過報數邏輯最後得到的列表是: + str(list_create)) 26 i = 0 27 while i < len(list_create): 28 if list_create[i] == 1: 29 print(最後剩下的編號是: + str(i + 1)) 30 return True 31 i = i + 1 32 33 # 根據用戶輸入的人數n,生成列表,同時執行移除動作 34 def list_create_rm(n): 35 try: 36 if not n.isdigit(): 37 return False 38 except ValueError as e: 39 pass 40 41 nn = int(n) 42 i = 0 43 list_create = [] 44 while i < nn: 45 list_create.append(1) 46 i = i + 1 47 print(生成的列表是: + str(list_create)) 48 remove_num_3(list_create) 49 50 if __name__ == __main__: 51 n = raw_input(請輸入人數:) 52 list_create_rm(n)

  • 測試結果
  • 技術分享

Python 約瑟夫圈問題