AtCoder Beginner Contest (ABC) 186 PythonでC問題解いてみた
前回の問題
こんにちは。 メリーです。
最近夜型の生活スタイルに戻ってまいりました。
だって、お昼眠いんだもん。しょうがないよね。
今日も元気にAtCoder Beginner Contest (abc) 191 C問題やっていきましょう。
言語はPython、提出はPyPyです。
目次
C問題
問題文
1からNまでの数字の中に、10進数、8進数で7が含まれていない数はどれだけあるでしょうか、という問題。
10進数だけじゃなくて、8進数でもダメってどんだけ7嫌いなんだよ・・・。
というわけで方針はこんな感じで。
1. 1からNまでの各数字を全探索。
2. これらの中で条件を満たす数字をカウント。
3. カウントしたものを出力。
という感じでやります。
実装したコードがこちら
n = int(input()) ans = 0 for i in range(1,n+1): if ("7" not in str(i)) and ("7" not in oct(i)): ans += 1 print(ans)
はい。単純ですね。
コードの解説を。
まぁ、解説することあんまないけど・・・。
ans = 0
で、カウントを初期化してます。
このansの数字を増やしていって、最終的に出力する予定。
for i in range(1,n+1): if ("7" not in str(i)) and ("7" not in oct(i)): ans += 1
for文の範囲は1からNまでです。
for文の範囲指定したときに、右側の数字(今回ではn+1)は含まれないので注意。
また、左側を指定しないと0から始まるのも注意。
そしてその後のif文。
二つの条件をandで繋いでいるだけ。
1. 十進数で表したとき、7が含まれていない
2. 八進数で表したとき、7が含まれていない
この2つの条件が同時に満たされたときにansが1増えるという物。
注意してほしいのは、"7"
というところ。
7
だけだと、「strの中にintが含まれてるわけないじゃ~~ん」って言われてエラーになります。
ちなみに、このエラーでめっちゃ悩んで発狂してました。解決に30分くらい悩んだ。
という感じです。
今回はあんまり解説することもなかったので、単章構成。
それではまた!!