🏹
【ド文系でもわかる」ABC 326 "326-like-Numbers"
Atcoder Beginners contest 326 "326-like-Numbers"解説 In Python
今回は先日のコンテストで出題されたという"326-like-numbers"という問題をPythonで解説していきます。
過去問として解いていくときの参考になれば幸いです。
問題
AtcoderのAB問題を解く際にはまず問題を理解することが重要です。
そのため僕なりに省略してみました。
分かりにくかったら下のリンクから問題文を読んでください。
- 326like numbersと呼ばれる整数がある
- 326LikeNumberは必ず3桁(裏を返せば326like-numbersは100-999ということになる)
- 326likeNumberの百の位と十の位をかけた数は一の位になる
- 例 3*2 = 6 -> 326は326like-number
- 次の326-like-numberはNが3桁である以上、必ず存在する。
- N以上の整数のうち一番小さい326-like-numberを出力しろ。
入力方法:
N
出力:
答え
アルゴリズム
今回のアルゴリズムを解説していきます。
今回の問題は全探索と言ってすべての可能性を一つずつ試していけば解ける問題です。
下の画像を見てください。
これが326-like-number(以降3ln)です。
ここで難しいことは考えずに何が正しければ326-like-numberになるのか考えてみると次の画像のような形になります。
まず上の画像でなにをしているのか説明すると、上の画像はNの各桁をABCという文字に置き換えています。そしてこのABCの内、AB=Cという式が成り立てば326-like-numbersだといえます。
後のアルゴリズムは簡単で、ABはCかどうかという質問をNから先の整数に326-like-numberと分かるまで聞いていくだけです。
これをコードに落とし込んでいきます。
Pythonでの回答例
Pythonで実際にACしたコードです。
コメントもついているので、ぜひ参考程度にお読みください。
# -*- coding: utf-8 -*-
#整数Nを受け取る
N = int(input())
#N→1000まで条件に達するまで繰り返す
for i in range(N,1001):
if int(str(i)[0]) * int(str(i)[1]) == int(str(i)[2]):
#数字を文字列に直し、3桁目と2桁目の積が1桁目と等しいかチェック
print(i)
exit()
#Exitを付けてプログラムを終了
continue
Discussion