AtCoderに登録したら解くべき過去問精選10問 #1【Python解答例]】
AtCoderで初めてコンテストに出たものの、
まったく歯が立たずどうしようか迷っていたところ、
AtCoder Beginners Selectionという初心者向けの問題を集めてくれていましたのでそれに取り組みました。
ABC086 A - Product
問題文
シカの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
問題文
すぬけ君は 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
問題文
黒板に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
競技プログラミングの学習にはこちらの本もおすすめです。