1 #coding:utf-82 #__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:
46 i = i + 1
47 print('生成的列表是:' + str(list_create))
48 remove_num_3(list_create)
49 50 if __name__ == '__main__':
51 n = raw_input('請輸入人數:')
經典問題 約瑟夫環
約瑟夫環就是n個人圍在一起丟手絹。手絹每經過乙個人報乙個數,開始的時候從第乙個人開始報數1,報數依次增加。若報到3的人出局,並且下乙個人重新從1開始報數。直到局內剩下兩個人。這個問題的輸入有兩個。第乙個是n,參與遊戲的人數。第二個是m,最後留下的倖存者人數。輸出有一行,是倖存者的編號。這個問題有兩種...
經典演算法之約瑟夫環問題
前幾天看到乙個程式設計題,約瑟夫環問題。問題的由來是乙個猶太故事,41乙個人被困,有39個人想要自殺,想活下去的兩個人就出主意說,大家圍成乙個環,報到3的人自殺。結果兩個人成功脫險,也就誕生了這個演算法。由於本人實力有限,寫出的程式也並未進行優化,可能時間複雜度和空間複雜度上有很多問題,只希望給各位...
C 經典題目 約瑟夫環問題
有n個人圍成一圈,順序排號。從第乙個人開始報數 1 3報數 凡報到3的人退出圈子,問最後留下的人原來排在第幾號。首先由使用者輸入人數n,然後對這n個人進行編號 因為如果不編號的話,我們就不能知道最後是哪位童鞋留下來了 然後就開始了一圈一圈的迴圈,不斷形成新的圈子,不斷有人被淘汰,那麼迴圈到什麼時候截...