CCF201712 2 遊戲 (python語言)

2021-09-30 20:10:15 字數 1705 閱讀 7838

試題編號:

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的倍數或其末位數 即...