試題編號:
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樣例輸出
樣例輸入
7 3樣例輸出
資料規模和約定
對於所有評測用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 9。
還有一種思路就是利用python方便的刪除陣列元素的函式pop。將每個出局的小朋友直接從陣列中刪去,但是也要對每個小朋友進行標記,不過標記內容是每個小朋友的初始編號。
下面程式以第一種思路進行編寫
n,k=input().split()
n,k=int(n),int(k)
#當count為n-1時,代表已經有n-1個小朋友被淘汰
count=0
#num代表接下來的小朋友報數是多少
num=1
#小朋友陣列,其中child[i][1]為乙個標記,false代表出局
child=
#初始化小朋友陣列
for i in range(n):
child+=[[num,true]]
num+=1
#如果符合出局的條件,並且不是最後乙個小朋友,則將其置為false
if (child[i][0]%k==0 or child[i][0]%10==k) and count!=n-1:
child[i][1]=false
count+=1
#重複給沒有淘汰的小朋友賦值,直到只剩下乙個小朋友
while(countfor i in range(n):
#下面兩個判斷時一定要加上count的判斷,否則可能出現小朋友全部被置為false的情況
if child[i][1]==true and count!=-1:
child[i][0]=num
num+=1
if (child[i][0]%k==0 or child[i][0]%10==k) and count!=n-1:
child[i][1]=false
count+=1
for i in range(n):
if child[i][1]==true:
print(i+1)
break
CCF201712 2 遊戲 佇列方法
試題編號 201712 2 試題名稱 遊戲時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 有 n個小朋友圍成一圈玩遊戲,小朋友從1至 n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,1號小朋友坐在 n號小朋友的順時針方向。遊戲開始,從1號小朋友...
ccf 201712 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的倍數或其末位數 即...