###### tags: `APCS` # **d673-No Problem** ### **題目連結:** [**d673**](https://zerojudge.tw/ShowProblem?problemid=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 題。 1. 一月不需要題目,庫存依然是 5,並且一月新出 3 題,總庫存變為 8。 1. 二月不需要題目,庫存依然是 8,二月新出 0 題,庫存不變。 1. 三月需要 10 題,庫存只有 8 題,不足以辦比賽,取消比賽,並且三月新出 3 題,庫存變為 11。 1. 以此類推,按照每月的需求和出題情況逐步檢查庫存是否足夠。 ### **完整程式碼** ```python= 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 ```