Python筆記-CSP 201912-1 報數

小狐狸233發表於2020-10-07

前言

此題的解決方法不唯一,你可以參考一下對應的解題思路,建議不要直接複製黏貼程式碼。

一、題目

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

二、演算法思路

大致的題意是說從1開始計數,一遇到7的倍數或數字中含有7時,就跳過這個數,直到成功計數的個數達到n個為止。而我們需要統計輸出的是玩這個計數遊戲的甲乙丙丁四人遇到“跳過數”的次數,並輸出四人的結果。

我使用的儲存結構是字典,以四個人的中文名稱作為對應的鍵,並初始化值為0,並定義了兩個變數,一個是當前報的數,一個是當前報數的人名。先建立了一個函式,用於判斷一個數是否含有7或為7的倍數,python中可以使用in來判斷一個字元存在於另一個字串中,所以可以直接使用if ’7’ in str(number)來判斷轉換為字串後的number中是否含有數字7。

使用死迴圈進行計數,當成功計數達到n個就break出去,符合“跳過數”時就統一下,因為遇到“跳過數”時不能算到成功計數個數裡,所以需要自減運算與後面的自加運算進行抵消。之後就是將當前玩家跳到下一玩家,當前數加1,成功計數個數加1。

三、程式碼

在這裡插入圖片描述

# coding=utf-8
#作者:小狐狸
#題目:報數

def check_seven(number):
    '''
    檢視輸入的數是否含有7或7的倍數,number為int型別
    是返回True,否返回False
    '''
    if number%7==0:
        return True
    if '7' in str(number):
        return True
    return False

if __name__ == "__main__":
    n = int(input())
##    print(n)
    dic = {}
    dic['甲'] = 0
    dic['乙'] = 0
    dic['丙'] = 0
    dic['丁'] = 0
    now = 1 #當前的數
    now_player = '甲' #當前報數的玩家
    number = 0 #已報的個數
    while True:
        if number==n: #報了n次結束
            break
        if check_seven(now): #若當前玩家的數符合跳過數的條件時
            dic[now_player] += 1
            number -= 1 #與之後的次數累加消除
        #跳到下一玩家
        if now_player == '甲':
            now_player = '乙'
##            print('甲',now)
        elif now_player == '乙':
            now_player = '丙'
##            print('乙',now)
        elif now_player == '丙':
            now_player = '丁'
##            print('丙',now)
        elif now_player == '丁':
            now_player = '甲'
##            print('丁',now)
        now += 1
        number += 1
    print(dic['甲'])
    print(dic['乙'])
    print(dic['丙'])
    print(dic['丁'])

相關文章