
atcoder問題集
atcoderの問題を前解いていたのでそのコードを共有したいと思います。
勉強記録として残します。
from unittest import result
def Sample1():
"""
配列の操作
入力した数値を何回2で割る事が出来るのか?
"""
# 入力するデータの個数
N = int(input())
# サイズNの配列Aへの入力
A = list(map(int,input().split()))
counter = 0 # 操作回数
while True: # Trueの間ループする。
can_do = True
for i in range(N):
if A[i] % 2 == 1:
can_do = False
if not can_do: # Falseの場合
break
for i in range(N):
A[i] //= 2
counter += 1
print(counter)
# Sample1()
def Sample2():
"""
A以上B以下の整数の中にKの倍数があるかどうか
"""
K = int(input())
A, B = map(int, input().split())
ext = False
for i in range(A, B + 1): # A からBをループする。
if i % K == 0: # 倍数があった場合フラグをTrueにする。
ext = True
if ext == True:
print('OK')
else:
print('NG')
# Sample2()
def Sample3():
# 整数nの各桁の和を求める関数
def sum(n):
sum_1 = 0
while n > 0: # nが0以下になるまでループする。
sum_1 += n % 10 # 1の位を求める
n //= 10
return sum_1
N, A, B = map(int, input().split())
result = 0
for i in range(1, N + 1):
if A <= sum(i) <= B: # A以上B以下
result += i
print(result)
# Sample3()
def Sample4():
"""
お金の枚数を計算する。
"""
N, Y = map(int, input().split()) # 入力する。Nが枚数Yが金額
a, b, c = -1, -1, -1
# 全探索
for i in range(N + 1):
for j in range(N + 1):
n = N - i - j
if n < 0 or n > N: # nが0以上N以下でない場合はスキップ
continue
if 10000 * i + 5000 * j + 1000 * n == Y: # 条件を満たすのか確認する。
a, b, c = i, j, n
print(f'1万円札{a}枚5千円札{b}枚千円札{c}枚')
# Sample4()
def prime_number():
num = int(input('数値入力'))
if num <= 1: # 素数ではない
print(False)
else:
for i in range(2, int(num**0.5)+1):
if num % i == 0: # 0になったらFalseを返す。
print(False)
break
else:
print(True)
# prime_number()
def Sample6():
num = int(input('数値入力'))
cnt = 0
for i in range(2, int(num**0.5)+1):
cnt += i
print(cnt)
# Sample6()
def Sample7():
"""
周期性
入力例 A B C K
操作をK回行う
そしてA-Bをした整数を出力する。
"""
A, B, C, K = map(int, input().split())
print(A - B if K % 2 == 0 else B - A)
# Sample7()
def Sample8():
"""
旅行プラン
T秒後に(x,y)に移動できるのかどうか
入力例:
2
3 1 2
6 1 1
出力例:
yes
"""
def solve():
N = int(input('プラン数'))
pt, px, py = 0, 0, 0 # 前回の時刻と座標を表す変数
for i in range(N):
t, x, y = map(int, input().split()) # 移動先の情報を受け取る
T, X, Y = t - pt, abs(x - px), abs(y - py) # 前回の状態と差分を取るabs→(絶対値)
if T < X + Y: # 間に合わない時は不可能
return False
if T % 2 != (X + Y) % 2:
return False
pt, px, py = t, x, y
return True # 最後まで到達した時
print('Yes' if solve() else 'NO') # returnでTrueの場合はYes,Falseの場合はNo
# Sample8()
def Sample9():
"""
N個の整数が並んでいてN個の整数の総和として考えられる最大値を求める
入力例
3
-10 5 4
出力例
19
"""
N = int(input())
A = list(map(int, input().split())) # 入力はリストにする。
num_minus = sum(v < 0 for v in A) # マイナスの個数を求める。sumを使用して合計を求める。
sum_abs = sum(map(abs, A)) # N個の絶対値の総和と最小値
min_abs = min(map(abs, A))
if num_minus % 2 == 0: # マイナスが偶数の場合
print(sum_abs)
else: # マイナスが奇数の場合
num = sum_abs - min_abs
print(num)
# Sample9()
def Sample10():
"""
入力した数値にいくつ素数がいくつ出るのか?
"""
num = int(input())
prime = []
for i in range(2, num + 1):
for j in range(2, i):
if i % j == 0:
break # 0で割れた場合はjのfor文を抜ける。
else:
prime.append(i) # 0にならなかった場合にリストに追加する。
print(prime)
# Sample10()
def Sample11():
"""
九九の表示
"""
for i in range(1, 10):
for j in range(1, 10):
num = i * j
if num >= 10:
print(num, end=" ")
else:
print(num, end=" ")
print()
Sample11()