ebisukeプログラミング初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。Arduinoで電子工作も

AtCoderに登録したら解くべき過去問精選10問 #1【Python解答例]】

AtCoderで初めてコンテストに出たものの、
まったく歯が立たずどうしようか迷っていたところ、
AtCoder Beginners Selectionという初心者向けの問題を集めてくれていましたのでそれに取り組みました。

ABC086 A - Product

atcoder.jp

問題文

シカのAtCoDeerくんは二つの正整数a,bを見つけました。aとbの積が偶数か奇数か判定してください。

制約

・1≤a,b≤10000
・a,bは整数

解答例

# coding:utf-8

a,b = map(int, input().split(" "))

if a * b % 2 == 0:
    print("Even")
else:
    print("Odd")

入力を受け取って、その積が偶数かどうかを判別する問題です。
偶数か奇数かの判別は2で割って、その余りが0かどうかで判別できます。

ABC081 A - Placing Marbles

atcoder.jp

問題文

すぬけ君は 1,2,3の番号がついた3つのマスからなるマス目を持っています。 各マスには 0 か 1 が書かれており、マス iにはsiが書かれています。
すぬけ君は 1 が書かれたマスにビー玉を置きます。 ビー玉が置かれるマスがいくつあるか求めてください。

制約

・s1,s2,s3は'1'あるいは'0'

解答例

# coding:utf-8

s = input()

count = 0

if s[0] == "1":
    count += 1
if s[1] == "1":
    count += 1
if s[2] =="1":
    count += 1

print(count)

解説

文字列をstring型で受け取り、'1'が何個あるか数えました。

ABC081 B - Shift only

atcoder.jp

問題文

黒板にN個の正の整数 A1,...,ANが書かれています.
すぬけ君は,黒板に書かれている整数がすべて偶数であるとき,次の操作を行うことができます.
黒板に書かれている整数すべてを、2で割ったものに置き換える.
すぬけ君は最大で何回操作を行うことができるかを求めてください.

制約

・1≤N≤200
・1≤Ai≤10^9

解答例

# coding:utf-8

n = int(input())

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

flag = 0
counter = 0

while True:
    for i in range(n):
        if a[i] % 2 != 0:
            flag = 1
    if flag == 1:
        break
    for i in range(n):
        a[i] = a[i]//2
    counter += 1

print(counter)

解説

まずn個の正の整数をリストaに格納します。
while文では、リストaに格納されたすべての数字に奇数があるか調べます。
奇数があればflagを立ててwhileを抜けます。
すべて偶数であれば、リストaの数字を2で割って、counter変数に1を足します。
最後にwhileが抜けたあとにcounterを出力すれば求める答えとなります。

最初は簡単な問題でしたが徐々に難しく感じるようになりました。
問題は10問ありましたので、残りの問題もあとで投稿したいと思います。



関連記事はこちら
ebisuke33.hatenablog.com
ebisuke33.hatenablog.com
ebisuke33.hatenablog.com


精選10問のあとはこちらもおすすめ
ebisuke33.hatenablog.com



競技プログラミングの学習にはこちらの本もおすすめです。