はじめに
tax_freeです。今回から、ABC(AtCoder Beginner Contestの略)をPython3で解いていきたいと思います。モチベーションは、単純にAtCoderが楽しいというのとCまで安定して解けるようになりたいからです。 レートを上げたい
現在のレートは
です。がんばって緑になりたい。モチベーションが続くかぎり記事を書いていきます。
A問題
問題
考えたこと
A,Bは入力値
直感的にA,Bのどちらかが9以上だと必ず隣合うことが分かる。また、A,Bが共に8以下ならば、交互にケーキを取ることで条件を満せることが分かる。
a, b = map(int,input().split())
if a < 9 and b < 9:
print('Yay!')
else:
print(':(')
これで、ACでした。
B問題
問題
考えたこと
D,Nは入力値
問題文のちょうど100でD回割り切れるというのは、$100^D+N$と同じと思い、
d ,n = map(int,input().split())
if d == 0:
ans = []
for i in range(1,101):
ans.append(i)
print(ans[n-1])
else:
a = 100 ** d * n
print(a)
このコードは2ヶ月前の自分が書いたものなので、どういう意図で書いたのか理解できません。(この頃はまだ初めて1週間とか)。しかし、この書き方だと、**$n≥100$の時の処理がうまくいきません。理由は、$n≥100$になるともう一回100で割ることができるようになるからです。ここまで、nが100以上と言いましたが、問題文より$n≤100$**なので、$n=100$のときだけ繰り上げればよいです。
d ,n = map(int,input().split())
if n == 100: n+=1
print(n*(100**d))
ずいぶんスッキリしました。if文を使うことによって$n=100$を考えることができるようになりました。これでACでした。
C問題
問題
考えたこと
N,aは入力値
a[i]は1≤i≤Nと満たすaのi番目の値
最初に問題を見た時に、a[i]は整数でなければならないと書いているので最小値は1になりそうだと思いました。また、aの要素が全て奇数だった場合は例2のように出力は0になります。なので、aをlistで受け取ってすべてのa[i]が1になるまで2で割っていけばよいのではと思いました。
n = int(input())
a = list(map(int,input().split()))
ans = 0
for i in range(0,n):
if a[i] % 2 == 0 :
while a[i] % 2 == 0:
a[i] //= 2
ans += 1
print(ans)
while文でa[i]が1になるまで2で割り続けています。
###まとめ
今回は、解説を見ることなくA~Cを解けたのでうれしかったです。今後も精進して緑に行けるようにがんばります。