問題描述
試題編號:
201712-2
試題名稱:
遊戲時間限制:
1.0s
記憶體限制:
256.0mb
問題描述:
問題描述
有n個小朋友圍成一圈玩遊戲,小朋友從1至n
編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,……,1號小朋友坐在n
號小朋友的順時針方向。
遊戲開始,從1號小朋友開始順時針報數,接下來每個小朋友的報數是上乙個小朋友報的數加1。若乙個小朋友報的數為k
的倍數或其末位數(即數的個位)為k
,則該小朋友被淘汰出局,不再參加以後的報數。當遊戲中只剩下乙個小朋友時,該小朋友獲勝。
例如,當n=5, k=2時:
1號小朋友報數1;
2號小朋友報數2淘汰;
3號小朋友報數3;
4號小朋友報數4淘汰;
5號小朋友報數5;
1號小朋友報數6淘汰;
3號小朋友報數7;
5號小朋友報數8淘汰;
3號小朋友獲勝。
給定n和k
,請問最後獲勝的小朋友編號為多少?
輸入格式
輸入一行,包括兩個整數n
和k,意義如題目所述。
輸出格式
輸出一行,包含乙個整數,表示獲勝的小朋友編號。
樣例輸入
5 2樣例輸出
3樣例輸入
7 3樣例輸出
4資料規模和約定
對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。
用到兩個列表和乙個計數器。計數器用來記錄當前小朋友的報數。第乙個列表用來裝沒有報數的小孩。第二個列表用來裝報數並且不是k的整數倍的小孩。當第乙個列表迴圈完一遍以後,把第二個列表重新複製給第乙個列表。然後第二個列表置空。然後迴圈第二遍。當第乙個列表長度是1時停止迴圈。然後輸出當前小孩的序號。
注意:
用range生成時,python3是生成乙個迭代器。所以需要用list來實際在記憶體生成這個列表。然後是這個列表的每個元素對應的小孩應該是這個數字加1(或者range生成列表從1開始到n+1)才是小孩的真正序號。
題中有兩點兒要求:一是小朋友數到k時淘汰;二是小朋友報數的個位數為k時小朋友也被淘汰。
l = list(map(int,input().split()))n, k = l[0], l[1]
li = list(range(n))
c = 1
while len(li) > 1:
li1 =
for i in range(len(li)):
if c%k==0:
c += 1
else:
c += 1
li = li1[:]
print(li[0]+1)
l = list(input().split())n, k = int(l[0]), int(l[1])
li = list(range(1,n+1))
c = 1
while len(li) > 1:
li1 =
#之前沒有考慮到k=1
if k == 1:
li = li1[:]
break
for i in range(len(li)):
if c%k==0:
c += 1
else:
c += 1
li = li1[:]
print(li[0])
l = list(input().split())n, k = int(l[0]), int(l[1])
li = list(range(1,n+1))
c = 1
while len(li) > 1:
li1 =
#之前沒有考慮到k=1
if k == 1:
li = li1[:]
break
for i in range(len(li)):
#之前沒有考慮個位數為k
if (c%k==0) or (c%10==k):
c += 1
else:
c += 1
li = li1[:]
print(li[0])
CCF201712 2 遊戲 佇列方法
試題編號 201712 2 試題名稱 遊戲時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 有 n個小朋友圍成一圈玩遊戲,小朋友從1至 n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,1號小朋友坐在 n號小朋友的順時針方向。遊戲開始,從1號小朋友...
CCF201712 2 遊戲 (python語言)
試題編號 201712 2 試題名稱 遊戲時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,1號小朋友坐在n號小朋友的順時針方向。遊戲開始,從1號小朋友開始順...
ccf 201712 2 試題名稱 遊戲
問題描述 有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,1號小朋友坐在n號小朋友的順時針方向。遊戲開始,從1號小朋友開始順時針報數,接下來每個小朋友的報數是上乙個小朋友報的數加1。若乙個小朋友報的數為k的倍數或其末位數 即...