經典約瑟夫環問題

2021-08-22 07:24:04 字數 1793 閱讀 2605

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:

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個人進行編號 因為如果不編號的話,我們就不能知道最後是哪位童鞋留下來了 然後就開始了一圈一圈的迴圈,不斷形成新的圈子,不斷有人被淘汰,那麼迴圈到什麼時候截...