【Paiza問題集】配列メニュー/フィボナッチ数

# Paiza問題集

## 配列メニュー/フィボナッチ数

### Step1 重複の削除
```Python
"""
重複の削除
https://paiza.jp/works/mondai/array_primer/array_primer__deduplication

問題
数列から数の重複をなくし、昇順にし改行区切りで出力してください
数列を配列に格納し、並び替える操作や重複を削除する操作を考えて解いてみましょう
"""

nums_array = [1, 3, 5, 1, 2, 3, 6, 6, 5, 1, 4]

print(*set(sorted(nums_array)), sep="\n")
```

### Step2 配列の最大最小
```Python
"""
配列の最大最小
https://paiza.jp/works/mondai/array_primer/array_primer__array_minmax

問題
1行目に整数Nが与えられます
2行目にN個の整数 a_1, a_2, .., a_N が与えられます
N個の整数のうち、最大の数と最小の数を半角スペース区切りで出力してください
N個の整数を大きい順や小さい順に並び替える操作を考えて解いてみましょう
"""

N = int(input())
nums = list(map(int, input().split()))
num_array = [0] * N

for i in range(N):
    num_array[i] = nums[i]

print(max(num_array), min(num_array), sep=" ")
```

### Step3 ある数以上以下の要素の列挙1
```Python
"""
ある数以上以下の要素の列挙1
https://paiza.jp/works/mondai/array_primer/array_primer__array_ave_step1

問題
1行目に整数 N が与えられます
2行目にN個の整数 a_1, a_2, .., a_N が与えられます
N個の整数のうち、5以上の数をすべて、入力された順に改行区切りで出力してください
また、5以上の数が一個もない場合は、何も出力しなくても問題ありません
"""

N = int(input())
num_array = [0]*N
num = list(map(int, input().split()))

for i in range(N):
    num_array[i] = num[i]
    if num_array[i] >= 5:
        print(num_array[i])
```

### Step4 ある数以上以下の要素の列挙2
```Python
"""
ある数以上以下の要素の列挙2
https://paiza.jp/works/mondai/array_primer/array_primer__array_ave_step2

問題
1行目に整数 N, K が与えられます
2行目にN個の整数 a_1, a_2, .., a_N が与えられます
N個の整数のうち、K以上の数をすべて、入力された順に改行区切りで出力してください
また、K以上の数が一個もない場合は、何も出力しなくても問題ありません
"""

N, K = map(int, input().split())
num_array = [0]*N
num = list(map(int, input().split()))

for i in range(N):
    num_array[i] = num[i]
    if num_array[i] >= K:
        print(num_array[i])
```

### Step5 ある数以上以下の要素の列挙3
```Python
"""
ある数以上以下の要素の列挙3
https://paiza.jp/works/mondai/array_primer/array_primer__array_ave_step3

問題
1行目に整数 N が与えられます
2行目に N 個の整数 a_1, a_2, .., a_N が与えられます
N個の整数のうち、N個の整数の平均以上の数をすべて、入力された順に改行区切りで出力してください
"""

N = int(input())
num_array = [0]*N
num = list(map(int, input().split()))

total = 0
for i in range(N):
    num_array[i] = num[i]
    total += num_array[i]

for i in range(N):
    if num_array[i] >= total/N:
        print(num_array[i])
```

### Step6 二点間の距離1
```Python
"""
二点間の距離1
https://paiza.jp/works/mondai/array_primer/array_primer__array_distance_step1

問題
1行目に整数 N が与えられます
2行目以降に N 個の点の座標 x_1 y_1, x_2 y_2, ..., x_N y_N が与えられます
点 (2, 3) と各点の距離を改行区切りで出力してください
"""

N = int(input())
x_array, y_array = [0]*N, [0]*N

for i in range(N):
    x, y = map(int, input().split())
    x_array[i], y_array[i] = x, y

for i in range(N):
    print(abs(x_array[i]-2) + abs(y_array[i]-3))
```

### Step7 二点間の距離2
```Python
"""
二点間の距離2
https://paiza.jp/works/mondai/array_primer/array_primer__array_distance_step2

問題
1 行目に整数 N, A, B が与えられます
2 行目以降に N 個の点の座標 x_1 y_1, x_2 y_2, .., x_N y_N が与えられます
A 番目の点 と B 番目の点の距離を出力してください
"""

N, A, B = map(int, input().split())
x_array = [0] * N
y_array = [0] * N

for i in range(N):
    x, y = map(int, input().split())
    x_array[i], y_array[i] = x, y

print(abs(x_array[A-1]-x_array[B-1]) + abs(y_array[A-1]-y_array[B-1]))
```

### Final問題 フィボナッチ数
```Python
"""
問題
フィボナッチ数
https://paiza.jp/works/mondai/array_primer/array_primer__fibo

問題
1 行目に整数 N が与えられます
N 番目までのフィボナッチ数を出力してください
"""

N = int(input())

F = [0]*N
F[0] = 0
F[1] = 1

for i in range(2, N):
    F[i] = F[i-2] + F[i-1]

for i in range(N):
    print(F[i])
```