1. 程式人生 > >CCF — 遊戲(Python實現:100分)

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號小朋友獲勝。

給定nk,請問最後獲勝的小朋友編號為多少?

輸入格式

輸入一行,包括兩個整數nk,意義如題目所述。

輸出格式

輸出一行,包含一個整數,表示獲勝的小朋友編號。

樣例輸入

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/

模擬退火演算法解決TSPpython實現 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-買菜-Python100

試題編號: 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 最小差值100python兩種方法實現

最小差值 問題描述 問題描述    給定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