tags: APCS

d673-No Problem

題目連結: d673

題目解析

這道題目是要判斷是否有足夠的題目來辦每月的比賽。每個月需要的題目數量必須依賴前一個月的庫存及之前的庫存累積。若某個月所需題目數量超過了當前的庫存數量,則當月比賽將取消。

解題方向

  • 讀取輸入:
    • 讀取年初的庫存題目數量。
    • 讀取每個月所出的題目數量。
    • 讀取每個月比賽所需要的題目數量。
  • 邏輯流程:
    • 初始化當前庫存為年初的庫存。
    • 逐月檢查是否有足夠的題目進行比賽。
    • 每個月的檢查後,將當月新增的題目數量加到庫存中(當月出的題目只能在下個月使用)。
    • 根據檢查結果輸出相應的信息。

程式解析

範例輸入:

5 3 0 3 5 8 2 1 0 3 5 6 9 0 0 10 2 6 4 1 0 1 1 2 2 -1

範例輸出:

Case 1: No problem! :D No problem! :D No problem. :( No problem! :D No problem! :D No problem! :D No problem! :D No problem! :D No problem! :D No problem! :D No problem! :D No problem! :D
  1. 初始化庫存為 5 題。
  2. 一月不需要題目,庫存依然是 5,並且一月新出 3 題,總庫存變為 8。
  3. 二月不需要題目,庫存依然是 8,二月新出 0 題,庫存不變。
  4. 三月需要 10 題,庫存只有 8 題,不足以辦比賽,取消比賽,並且三月新出 3 題,庫存變為 11。
  5. 以此類推,按照每月的需求和出題情況逐步檢查庫存是否足夠。

完整程式碼

import sys case = 1 while True: first = int(input()) # 年初的庫存 if first == -1: break row2 = input() test = list(map(int, row2.split())) row3 = input() used_test = list(map(int, row3.split())) print("Case " + str(case) + ":") S = first for i in range(0, 12): if S >= used_test[i]: print("No problem! :D") S = S - used_test[i] else: print("No problem. :(") # 累加上個月的題目(本月的不算,下個月才能用) S += test[i] case += 1