# d097 - Jolly Jumpers ### 題目連結: [d097](https://zerojudge.tw/ShowProblem?problemid=d097) ### 題目解析 * jolly jumper 的意思代表尋找數列之中相鄰兩個數字的絕對值,如果剛好是 `1, 2, 3, ... n-1` 則稱為 ==Jolly== * Jolly Jumper 的絕對值有可能是 `1, 2, 3, ..., n-1` * 題目的提示說明中可以發現 Jolly jumper 似乎不需要連續排序,只要滿足數列中兩數的絕對值所形成的數列從 `1, 2, 3, ..., n-1` 都有就可以了 ### 題目類型 串列/數學/流程控制 ### 範例測資解讀 * 輸入 * 輸入測資為一列,第一個數字為 n,代表接下來有n個整數,並且形成數列 * n的範圍 < 3000 * 輸出 * 輸出為兩種文字 Jolly/Not jolly ### 其他注意事項 * 無 ### 程式解析 * 此題在撰寫程式前要先了解 jolly jumper 的意義,數列需要計算前後兩項的差值,取絕對值後進行判斷 * 首先處理輸入資料,此輸入資料並非單行數字全部都是數列內容,第一個數字為 n,因此使用 list 儲存時,需要移除第一個數字 n,並獨立儲存使用 ``` python nums = list(map(int, input().split())) n = nums[0] nums.pop(0) # 將第一個數字移出 ``` 接著計算 nums 串列之中任兩項元素的絕對值,並使用另外一個串列(delta)儲存 ``` python delta = [ 0 for x in range(n) ] #注意 range() 的起始位置 for i in range(1, n): d = abs(nums[i]-nums[i-1]) # 如果絕對值 d 小於 n-1,則在 d 的位置+1 # 如果要滿足 jolly jumper 的條件 # 則delta串列中每個位置的元素皆為 1 if d <= n-1: delta[d] += 1 ``` 最後判斷 delta 串列中是否滿足 jolly jumper 的條件 輸出 Jolly or Not jolly 即可 ### 完整程式碼 (僅供參考) ``` python=01 while True: try: #start nums = list(map(int, input().split())) n = nums[0] nums.pop(0) delta = [ 0 for x in range(n) ] for i in range(1, n): d = abs(nums[i]-nums[i-1]) if d <= n-1: delta[d] += 1 isJolly = True for i in range(1, n): if delta[i] != 1: isJolly = False break if isJolly == True: print("Jolly") else: print("Not jolly") except: break ``` ###### tags: `基礎15題解` `APCS` `ZeroJudge`