0
0

More than 3 years have passed since last update.

PythonでABC100のA~C問題を解く

Last updated at Posted at 2019-12-30

はじめに

tax_freeです。今回から、ABC(AtCoder Beginner Contestの略)をPython3で解いていきたいと思います。モチベーションは、単純にAtCoderが楽しいというのとCまで安定して解けるようになりたいからです。 レートを上げたい
現在のレートはスクリーンショット 2019-12-30 19.02.41.png
です。がんばって緑になりたい。モチベーションが続くかぎり記事を書いていきます。

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を解けたのでうれしかったです。今後も精進して緑に行けるようにがんばります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0