# 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`