AtCoderでPythonの勉強 その6

AtCoder

AtCoder Beggineres Selection、問6 ABC083B – Some Sums です

問題文
1 以上 N 以下の整数のうち、10 進法での各桁の和が A 以上 B 以下であるものの総和を求めてください。

制約
・1 ≤ N ≤ 104
・1 ≤ A ≤ B ≤ 36
・入力はすべて整数である

入力は以下の形式で標準入力から与えられる。
N A B

出力
1 以上 N 以下の整数のうち、10 進法での各桁の和が A 以上 B 以下であるものの総和を出力せよ

問題文の通りに愚直に計算しましょう

def MakeSumOfDigits(number):
        sum = 0
        while number > 0:
                surplus = number % 10
                sum = sum + surplus
                number = number // 10
        return (sum)

total = 0
for i in range(1, N+1):
        sum_of_digits = MakeSumOfDigits(i)
        if (A <= sum_of_digits) and (sum_of_digits <= B):
                total = total + i

print(total)

MakeSumOfDigits()は「10で割った余りで1の位の値を得て、元の数を10で割る」を元の数が0まで繰り返しています。
最初は number = int(number / 10) にしていましたが // という「除算の整数部分を返す」という便利な演算子が有るのを知って使ってみました。

上記のコードで提出。ん?すべて RE
ローカル環境だと正解が出たのに。なんでだろ?

時間の都合で続きは明日。

(8月5日 追記)

入力を書いてませんでした。そりゃ落ちるわ。。。
以下を1行目に追加したら AC になりました。

N, A, B = map(int, input().split())

コメント

タイトルとURLをコピーしました