目錄前言
一、問題描述
二、問題分析
三、程式說明
最近我在做ccf的題目,也打算把每道題的解題思路都寫到部落格上來,希望能幫助到也在做ccf題目的讀者們,希望你們通過本文能有所提示,幫助大家提公升程式設計能力。另外有個很好的想法就是,建議讀者們可以先看一下問題分析的部分,然後自己再整理一下思路,重新做一遍,最後再參考**,我想這樣會更有收穫。
問題描述本題主要的解題思路如下:有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。
①定義乙個列表存放每個人的存活狀態,1表示存活,0表示淘汰;並且用乙個變數 total 計算列表的和
②用乙個變數num模擬報數,遍歷n個元素,判斷存活狀態,存活的人才能報數,淘汰的人不可報數;同時判斷報的數值是否能否整除k,或者其個位數是否等於k,符合該條件則將該元素淘汰,替換為0
③建立外層迴圈,此迴圈判斷列表的和是否等於1,即只剩下最後乙個人時,迴圈結束
④找出最後存活的人的下標,輸出下標+1的值即為結果
n:輸入n個人,1表示存活,0表示淘汰
k:輸入淘汰數字,凡是k的倍數或其末位數(即數的個位)為k,則這個人被淘汰出局
a:儲存n個人的存活狀態
total:計算列表a的和
num:模擬報數,存活的人才能報數,淘汰的人不允許報數
index:找出最後存活的人的下標
python語言的程式如下(100分):
# 遊戲
s = input().split()
n = int(s[0])
k = int(s[1])
a = [1 for i in range(0,n)] # 有n個人,1表示存活,0表示淘汰
total = sum(a)
num = 0
while total > 1:
for i in range(0,len(a)):
if a[i] != 0:
num += 1
if (num % k == 0) or (num % 10 == k):
a[i] = 0
total = sum(a)
if total == 1:
break
index = a.index(1) # 找出1的下標
print(index+1)
ccf 201712 2 遊戲 Python實現
問題描述 試題編號 201712 2 試題名稱 遊戲時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 有n個小朋友圍成一圈玩遊戲,小朋友從1至n 編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,1號小朋友坐在n 號小朋友的順時針方向。遊戲開始,從1...
Python實現猜數字遊戲1 0版
功能 隨機生成乙個數字,最多有3次猜測機會,如果第一次沒有猜對,則從第二次猜測開始會提示玩家所猜的數字是大了還是小了。執行環境 python 3 import random 呼叫生成隨機數的模組random secret random.randint 1,10 呼叫random模組中生成整型隨機數的...
CCF201712 2 遊戲 (python語言)
試題編號 201712 2 試題名稱 遊戲時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 有n個小朋友圍成一圈玩遊戲,小朋友從1至n編號,2號小朋友坐在1號小朋友的順時針方向,3號小朋友坐在2號小朋友的順時針方向,1號小朋友坐在n號小朋友的順時針方向。遊戲開始,從1號小朋友開始順...