mery's Notes

めりーがプログラミングしたりします。

MENU

AtCoder Beginner Contest (ABC) 186 PythonでC問題解いてみた

前回の問題

mery-kirokudayo.hateblo.jp

f:id:mery_poke:20211101223746p:plain

こんにちは。 メリーです。

最近夜型の生活スタイルに戻ってまいりました。
だって、お昼眠いんだもん。しょうがないよね。

今日も元気にAtCoder Beginner Contest (abc) 191 C問題やっていきましょう。

言語はPython、提出はPyPyです

目次

C問題

問題文

C - Unlucky 7

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分くらい悩んだ。

という感じです。

今回はあんまり解説することもなかったので、単章構成。

それではまた!!