CCF — 遊戲(Python實現:100分)
2017.12.2 遊戲
目錄
前言
最近我在做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 — 遊戲(Python實現:100分)
2017.12.2 遊戲 目錄 前言 前言 最近我在做CCF的題目,也打算把每道題的解題思路都寫到部落格上來,希望能幫助到也在做CCF題目的讀者們,希望你們通過本文能有所提示,幫助大家提升程式設計能力。另外有個很好的想法就是,建議讀者們可以先看一下問題分析
CCF — 碰撞的小球(Python實現:100分)
2018.03.2 碰撞的小球 目錄 前言 前言 最近我在做CCF的題目,也打算把每道題的解題思路都寫到部落格上來,希望能幫助到也在做CCF題目的讀者們,希望你們通過本文能有所提示,幫助大家提升程式設計能力。另外有個很好的想法就是,建議讀者們可以先看一下問
CCF — 工資計算(python實現:100分)
2016.12.2 工資計算 目錄 前言 前言 最近我在做CCF的題目,也打算把每道題的解題思路都寫到部落格上來,希望能幫助到也在做CCF題目的讀者們,希望你們通過本文能有所提示,幫助大家提升程式設計能力。另外有個很好的想法就是,建議讀者們可以先看一下問題
CCF — 打醬油(Python實現:100分)
2017.09.1 打醬油 目錄 前言 前言 最近我在做CCF的題目,也打算把每道題的解題思路都寫到部落格上來,希望能幫助到也在做CCF題目的讀者們,希望你們通過本文能有所提示,幫助大家提升程式設計能力。另外有個很好的想法就是,建議讀者們可以先看一下問題分
CCF — 學生排隊(Python實現:100分)
2017.03.2 學生排隊 目錄 前言 前言 最近我在做CCF的題目,也打算把每道題的解題思路都寫到部落格上來,希望能幫助到也在做CCF題目的讀者們,希望你們通過本文能有所提示,幫助大家提升程式設計能力。另外有個很好的想法就是,建議讀者們可以先看一下問題
詳解兩個佇列實現一個棧(python實現——經典面試題)
1、任務詳解 使用兩個佇列資料結構實現一個棧,要求實現棧的出棧和進棧操作。 2、解題思路 push()操作: 為了保證先進
詳解兩個棧實現一個佇列(python實現——經典面試題)
1、題目說明 使用兩個棧結構,實現一個佇列功能,實現佇列的新增元素和彈出元素。 注意: 佇列特點是隻能在佇列尾部新增元素,在佇列頭部刪除元素,先進先出(FIFO/
模擬退火演算法解決TSP(python實現 110+行程式碼)【gif生成】
簡述 程式碼我是基於我之前寫的兩篇,一篇是遺傳演算法TSP的Python實現,一篇是模擬退火演算法的解決TSP的C++實現。 模擬退火演算法理論+Python解決函式極值+C++實現解決TSP問題 遺傳演算法解決TSP問題 Python實現【160行以內程式碼】
201412-2 CCF CSP Z字形掃描(Python實現100分)
試題編號:201412-2 試題名稱:Z字形掃描 時間限制:2.0s 記憶體限制:256.0MB 問題描述:問題描述 在影象編碼的演算法中,需要將一個給定的方形矩陣進行Z字形掃描(Zigz
CCF-買菜-Python(100分)
試題編號: 201809-2 試題名稱: 買菜 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 小H和小W來到了一條街上,兩人分開買菜,他們買菜的過程可以描述為,去店裡買一些菜然後去旁邊的一個廣場把菜裝上車,兩人都要買n種菜,所以也都要裝n
python ccf題解 201412-2 Z字形掃描(100分)
問題描述 試題編號: 201412-2 試題名稱: Z字形掃描 時間限制: 2.0s 記憶體限制: 256.0MB 問題描述: 問題描述
python ccf題解 201312-1 出現次數最多的數(100分)
試題編號: 201312-1 試題名稱: 出現次數最多的數 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述 給
ccf 201512-2 消除類遊戲(100分)
問題描述 消除類遊戲是深受大眾歡迎的一種遊戲,遊戲在一個包含有n行m列的遊戲棋盤上進行,棋盤的每一行每一列的方格上放著一個有顏色的棋子,當一行或一列上有連續三個或更多的相同顏色的棋子時,這些棋子都被消除。當有多處可以被消除時,這些地方的棋子將同時被消除。 現在給你一個n行m列的
CCF 201609-12 消除類遊戲(100分)
CSP題目 消除類遊戲 問題描述 消除類遊戲是深受大眾歡迎的一種遊戲,遊戲在一個包含有n行m列的遊戲棋盤上進行,棋盤的每一行每一列的方格上放著一個有顏色的棋子,當一行或一列上有連續三個或更多的相同顏色的棋子時,這些棋子都被消除。當有多處可以被消除時,這些地方的棋子將同時被消除
python ccf題解 201403-1 相反數(100分)
試題編號: 201403-1 試題名稱: 相反數 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述 有 N 個非
CCF201712-1 最小差值(100分)python兩種方法實現
最小差值 問題描述 問題描述 給定n個數,請找出其中相差(差的絕對值)最小的兩個數,輸出它們的差值的絕對值。 輸入格式 輸入第一行包含一個整數n。 第二行包含n個正整數,相鄰整數之間使用一個空格分隔。 輸出格式 輸出一個整數,表示答案。 樣例輸入
算法:IP分割問題(python實現)
今天群裏有個朋友出了個題,是一家公司的面試題,題目如下(補充:對於ip0開頭的也是無效的,如分割後001.1.1.1這種是不可以的): 分析:這裏我們舉一個最簡單的例子1.1.1.12.2.2.2。首先能想到的解決方法肯定是使用循環了,我們可以寫2個循環嵌套(有點像冒泡排序)從第0個位置截取1個,從
Python實現:函數的遞歸(示例)
style 返回 找到 art python實現 個數 clas star 數字 #1,用遞歸實現計算函數的階乘def myfac(n): #用循環實現 s= 1 for i in range(1,n+1): s*=i
【尋優演算法】交叉驗證(Cross Validation)引數尋優的python實現:多引數尋優
【尋優演算法】交叉驗證(Cross Validation)引數尋優的python實現:多引數尋優 一、網格搜尋原理 二、網格搜尋+交叉驗證用於多引數尋優的python實現 1、訓練模型及待尋優引數 2、直接迴圈巢狀實現網格搜尋 + cros
【尋優演算法】交叉驗證(Cross Validation)引數尋優的python實現:單一引數尋優
【尋優演算法】交叉驗證(Cross Validation)引數尋優的python實現:單一引數尋優 一、交叉驗證的意義 二、常用的交叉驗證方法 1、Hold one method 2、K-flod CV 3、Leave-One-Ou