#46509: 方法思路+python解(25ms, 3.4MB)


chenwei980503@gmail.com (陳維(Z))

學校 : 新北市立北大高級中學
編號 : 278351
來源 : [101.10.97.141]
最後登入時間 :
2025-09-29 19:33:05

本題需要模擬「時鐘紙牌遊戲」的發牌和翻牌過程。遊戲規則如下:

  1. 發牌階段:將一副牌依順時針方向發到13個牌堆(代表時鐘的12個位置和中心位置),每個牌堆發4張牌。

  2. 遊戲階段:從「K」牌堆的最上面一張牌開始,翻開這張牌,根據牌面數字移動到對應牌堆,翻開該牌堆的最上面一張牌,並將原牌放在該牌堆的最下面。重複此過程,直到當前牌堆沒有未翻開的牌為止。

  3. 輸出結果:統計翻開的牌數(兩位數,不足補零)和最後一張翻開的牌

#python

def s():  # 定義主函數
    while True:  # 持續讀取輸入
        l = input().strip()  # 讀取一行輸入並去除空白
        if l == '#':  # 如果輸入是#就結束
            break
        d = []  # 初始化牌組列表
        d.extend(l.split())  # 將第一行牌加入牌組
        for _ in range(3):  # 再讀取3行牌
            d.extend(input().strip().split())  # 加入牌組
        d = d[::-1]  # 反轉牌組順序(因為輸入是從底部到頂部)
        
        c = [[] for _ in range(13)]  # 初始化13個牌堆(時鐘的12個位置+中心)
        for i in range(52):  # 發52張牌
            p = i % 13  # 計算應該發到哪個牌堆(0-12)
            c[p].append(d[i])  # 將牌放入對應牌堆
            
        k = 0  # 計數器(記錄翻開幾張牌)
        p = 12  # 從K牌堆(第13個位置)開始
        lc = None  # 記錄最後一張牌
        
        while True:  # 遊戲主循環
            if not c[p]:  # 如果當前牌堆沒牌了就結束
                break
            cc = c[p].pop()  # 取出當前牌堆最上面的牌
            lc = cc  # 更新最後一張牌
            k += 1  # 翻牌計數+1
            
            r = cc[0]  # 取得牌的數字部分
            if r == 'A':  # A對應1點鐘位置(索引0)
                np = 0
            elif r == 'T':  # T(10)對應10點鐘位置(索引9)
                np = 9
            elif r == 'J':  # J(11)對應11點鐘位置(索引10)
                np = 10
            elif r == 'Q':  # Q(12)對應12點鐘位置(索引11)
                np = 11
            elif r == 'K':  # K對應中心位置(索引12)
                np = 12
            else:  # 其他數字2-9
                np = int(r) - 1  # 轉數字後-1得到對應索引
            p = np  # 移動到下一個牌堆
            
        print(f"{k:02d},{lc}")  # 輸出結果(兩位數翻牌數,最後一張牌)

s()  # 執行主函數