過去問精選 10 問やってみる1

同期から勧められたのでこの記事読みました。
qiita.com


良問10選とのことで、できるとこまでやってみようと思います。


第 1 問: ABC 086 A - Product (100 点)
単純にかけて2のmodをとって判定するだけ

a, b = map(int, input().split())
if a * b % 2 == 0:
  print("Even")
else:
  print("Odd")

第 2 問: ABC 081 A - Placing Marbles (100 点)
文字列で受け取って1文字ずつ判定するだけ

s = input()
sum = 0
for i in s:
  if i == "1":
    sum += 1
print(sum)

第 3 問: ABC 081 B - Shift Only (200 点)
多少冗長な書き方をしてしまったような・・・
割って値は減っていくはずなので、while文で回して割れなくなったらbreakするようにした

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

count = 0
flag = 0
while (flag == 0):
  for i in range(len(a)):
    if a[i] % 2 != 0:
      flag = 1
      break
    else:
      a[i] //= 2
  count += 1
print(count-1)

第 4 問: ABC 087 B - Coins (200 点)
最初は愚直にAの個数Bの個数で引き算してましたが、
すべて数え上げてから正解のみカウントアップするほうが楽と気づいたので書きかえてFinish
参考演算子を書き方を学びました!!

A = int(input())
B = int(input())
C = int(input())
X = int(input())

a_max = X // 500
b_max = X // 100
c_max = X // 50

a_range = a_max if A > a_max else A 
b_range = b_max if B > b_max else B
c_range = c_max if C > c_max else C

count = 0

for i in range(c_range+1):
  for j in range(b_range+1):
    for k in range(a_range+1):
      if k * 500 + j * 100 + i * 50 == X:
        count += 1

print(count)

第 5 問: ABC 083 B - Some Sums (200 点)
ちょっとごり押しで解きました
全数チェックで、いったん文字列として扱って1桁ずつ足してきました、時短のために足し途中で上限超えたらbreakしました

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

sum = 0

for i in range(1,N+1):
  p = 0
  for k in str(i):
    p += int(k)
    if p > B:
      break
  if A <= p and p <= B:
    sum += i
print(sum)

とりあえずは5問解いたので、残りは次回にします!