【ABC083 B】「Some Sums」を解く【Python3】

「AtCoder」解説一覧へ

AtCoder過去問精選10問まとめへ

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

提出
n, a, b = map(int, input().split())
ans = 0

for i in range(1,n+1):
    num = sum(map(int, str(i)))
    if a<=num<=b:
        ans += i

print(ans)

1 以上 N 以下の数字を全て確かめる方法でできます。

0から始まるため、「range(1,n+1)」であることに注意が必要です。

数字を一度文字列に変換しています。文字列にすることで、それぞれの文字にインデックス番号が振り分けられ、一つずつ取り出せるようになります。

各要素をmap関数で整数にし、その合計値がA 以上 B 以下であるかを確認します。

条件に合えば ans に元の整数(各桁の合計値ではなくて)を足します。

map()関数

map()関数は、イテラブル(リストやタプルなど)の各要素に関数の処理を適用します。

map(関数、イテラブル)

まとめて以下のように書くこともできます。

提出
n, a, b = map(int, input().split())
print(sum(i for i in range(1, n+1) if a <= sum(map(int, str(i))) <= b))

条件に合う i を合計したものを出力しています。

【ABC083】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です