【Paiza問題集】ループメニュー2/数列の列挙

# Paiza問題集
Pythonで回答

## ループメニュー2/数列の列挙

### Step01 各桁の和
```Python
"""
各桁の和
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__digit_sum

問題
10進数で表された整数Nが与えられます
整数Nの各桁の和を計算し、出力してください
"""

N = int(input())

total = 0
while N > 0:
    total += N % 10
    N //= 10

print(total)
```

### Step02 カウント変数を使った計算
```Python
"""
カウント変数を使った計算
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__index_multi

問題
1行目に整数Nが与えられます。
2行目にN個の整数 M_1, M_2, ..., M_N が与えられます
i番目のMをM_iとするとき、M_i * iを改行区切りで出力してください
"""

N = int(input())
M = list(map(int, (input().split())))

for i in range(N):
    print(M[i]*(i+1))
```

### Step03 2で何回割れる?
```Python
"""
2で何回割れる?
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__div_two

問題
Nが何回2で割れるかを求め、出力してください
"""

N = int(input())

div_count = 0
while N % 2 == 0:
    div_count += 1
    N //= 2

print(div_count)
```

### Step04 任意の数で何回割れる?
```Python
"""
任意の数で何回割れる?
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__div_m

問題
整数N,Mが与えられます。
Nが何回Mで割れるかを求め、出力してください
"""

N, M = map(int, (input().split()))

div_count = 0
while True:
    if N % M == 0:
        div_count += 1
        N //= M
    else:
        break

print(div_count)
```

### Step05 10進数から2進数に変換
```Python
"""
10進数から2進数に変換
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__conv_binary

問題
10進数で表された整数Nが与えられます
Nを2進数に変換して出力してください
"""

print(f"{int(input()):b}")
```

### Step06 10進数からM進数に変換
```Python
"""
10進数からM進数に変換
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__conv_nbase

問題
10進数で表された整数N,Mが与えられます
NをM進数に変換して出力してください
"""

N, M = map(int, (input().split()))

total = ""
while N > 0:
    total += str(N % M)
    N //= M

print(total[::-1])
```

### Step07 NがMずつ増えたときにいつKを越える?
```Python
"""
NがMずつ増えたときにいつKを越える?
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__inc_m

問題
整数N,M,Kが与えられます
NがMずつ増えるとき、何回目にKを越えるか出力してください
"""

N, M, K = map(int, (input().split()))

count = 0
while N <= K:
    N += M
    count += 1

print(count)
```

### Step08 毎日増加するお金
```Python
"""
毎日増加するお金
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__inc_percent

問題
現在所持金をA円持っています
所持金が毎日10%ずつ増えるとき、何日後にB円を超えるか出力してください
また、増加するお金は小数点以下切り捨てで考えることとします
例として、所持金が831円のとき、10%は83.1円ですが、増加するお金は83円です
"""

A, B = map(int, input().split())

days = 0
while A <= B:
    A = int(A * 1.1)
    days += 1

print(days)
```

### Step09 階乗の計算
```Python
"""
階乗の計算
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__factorial

問題
整数Nが与えられます
Nの階乗N!を計算して出力してください
"""

N = int(input())

num = 1
for i in range(N, 0, -1):
    num *= i

print(num)
```

### Step10 階乗の末尾に0はいくつ付く?
```Python
"""
階乗の末尾に0はいくつ付く?
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__factorial_zero

問題
整数Nが与えられます
Nの階乗N!の末尾に0がいくつ付くか求め、出力してください
"""

N = int(input())

zero_counter = 0
while N > 0:
    zero_counter += N//5
    N //= 5

print(zero_counter)
```

### Step11 加算された数列の最大値
```Python
"""
加算された数列の最大値
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__add_maxseq

問題
N個の整数 a_1, a_2, .., a_N が与えられます
a_iにiを足したとき、a_1 , .. , a_Nの最大値を出力してください
"""

N = int(input())
a = list(map(int, input().split()))

max_num = 0
for i in range(N):
    max_num = max(max_num, a[i]+(i+1))

print(max_num)
```

### Step12 加算された数列の最小値
```Python
"""
加算された数列の最小値
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__add_minseq

問題
N個の整数 a_1, a_2, .., a_N が与えられます
a_iにiを足したとき、N個の整数の最小値を出力してください
"""

N = int(input())
a = list(map(int, input().split()))

min_num = 200
for i in range(N):
    min_num = min(min_num, a[i]+(i+1))

print(min_num)
```

### Step13 1はどこにある?
```Python
"""
1はどこにある?
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__seq_one

問題
N個の整数 a_1, a_2, ..., a_Nが与えられます
a_1, a_2, .., a_N のうち、1がある位置を先頭から順に改行区切りで出力してください
a_1を1番目とし、a_1, a_2, .., a_N には少なくとも1個は1が含まれます
"""

N = int(input())
a = list(map(int, input().split()))

one_counter = 0
for i in range(N):
    if a[i] == 1:
        one_counter += 1
        print(i+1)
```

### Step14 約数の個数
```Python
"""
約数の個数
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__divsor_count

問題
整数Nが与えられます
Nの約数の個数を出力してください
約数とは、Nを割り切る整数のことを指します
"""

N = int(input())

div_num = 1
div_counter = 0

while div_num <= N:
    if N % div_num == 0:
        div_counter += 1
    div_num += 1

print(div_counter)
```

### Final問題 数列の列挙
```Python
"""
数列の列挙
https://paiza.jp/works/mondai/loop_problems2/loop_problems2__divsor_print

問題
整数Nが与えられます
Nの約数を小さい方から順に改行区切りで出力してください
"""

N = int(input())

div_num = 1

while div_num <= N:
    if N % div_num == 0:
        print(div_num)
    div_num += 1
```