編寫程式,模擬報數遊戲。有n個人圍成一圈,順序編號,從第乙個人開始從1到k(假設k=3)報數,報到k的人退出圈子,然後圈子縮小,從下乙個人繼續遊戲,問最後留下的是原來的第幾號。
n=
int(
input
("請輸入總人數:n="))
k=int
(input
("請規定報到數字幾的人退出圈子:k="))
circle=
list
(range(1
,n+1))
print
("遊戲開始前的初始位置"
,circle)
num=1i=
1while
len(circle)!=1
:0))
#把已報數的人取出放到隊尾,以此實現圍成圈迴圈往復
num+=
1if num==k:
del circle[0]
#把報到規定數字的人踢出圈子
num=
1#重新從1開始報數
print
("剩餘的列表是:"
,circle)
i +=
1print
("最後留下的人是原來第{}號的人"
.format
(*circle)
)
def
game
(n, k)
: lst =
list
(range(1
, n+1)
)print
(f"遊戲開始之前的初始位置\n"
) count =
0while
len(lst)
>1:
for i in
range
(k-1):
# k-1次將首部元素放到尾部0)
) del_num = lst.pop(0)
count +=
1print
(f"第次刪掉的是"
)print
(f"剩下的人:"
, lst)
return lst[0]
n =int
(input
("總人數 n = "))
k =int
(input
("刪除報號數 k = "))
result = game(n, k)
print
(f"最後留下的是原來的號"
)
3 迴圈陣列實現約瑟夫(報數出圈)問題
package 資料結構 約瑟夫問題 設編號1 2 3.n的n個小孩圍坐一圈,約定編號為k的人從1開始報數,數到m的人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推 直到所有人出列位置,由此產生乙個出隊的編號序列 first指向第乙個結點 一開始的單個結點保持環形的性質 自反 新增乙...
報數出列問題
已知n個人 以編號1,2,3,n分別表示 排成一列。第一輪從編號為1的人開始依次報數,數到2的倍數的人出列 第二輪從頭開始依次報數,數到3的倍數的人出列 第三輪再次從頭開始依次報數,數到2的倍數的人出列 第四輪從頭開始依次報數,數到3的倍數的人出列 依此規律重複下去,直到佇列中的人數不超過三個為止。...
N圍圈數數出圈
問題描述 有n個人圍城一圈,並從1到n編號,從第m個人開始報數,報到k的人出圈,下乙個人繼續從1開始報數,再報到k的人出圈,直到最後只剩下乙個人。問最後剩下的這個人是幾號。分析 用陣列來儲存每個人的編號,a 0 1,a 1 2,a n 1 n。定義出圈人數為outcircle,每齣圈乙個人,outc...