AtCoder Beginners Selection ABC083B – Some Sumsをpythonで解いてみた

本サイトABC083B – Some Sumsへは以下から

問題:Some Sums

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

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

入力

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

N A B

出力

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

入力例 1

20 2 5

出力例 1

84

20 以下の整数のうち、各桁の和が 2 以上 5 以下なのは 2,3,4,5,11,12,13,14,20 です。これらの合計である 84 を出力します。

入力例2

10 1 2

出力例2

13

入力例3

100 4 16

出力例3

4554

解答例

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

total = 0

for i in range(1, N+1):
    digit_sum = sum(map(int, str(i)))
    if A <= digit_sum <= B:
        total += i

print(total)

解説

この問題は、与えられた範囲内の整数の中で、各桁の和が特定の範囲内にあるものの総和を計算するものです。

以下は、この問題を解くためのPythonのプログラムの手順です。

  • 入力の受け取り:
    • N, A, B = map(int, input().split())を使用して、整数NABを受け取ります。
  • 初期化:
    • totalを0に初期化します。これは、条件を満たす整数の総和を計算するための変数です。
  • 各桁の和の計算:
    • forループを使用して、1からNまでの各整数に対して以下の操作を行います:
      • その整数の各桁の和を計算します。
      • その和がA以上B以下であるかどうかを確認します。
      • 条件を満たす場合、その整数をtotalに加算します。
  • 結果の出力:
    • print(total)を使用して、条件を満たす整数の総和を出力します。

以下は、この問題を解くためのPython3のプログラムです。

# 入力の受け取り
N, A, B = map(int, input().split())

# 初期化
total = 0

# 各桁の和の計算
for i in range(1, N+1):
    # 各桁の和を計算
    digit_sum = sum(map(int, str(i)))
    # 和がA以上B以下であるか確認
    if A <= digit_sum <= B:
        total += i

# 結果の出力
print(total)

digit_sum = sum(map(int, str(i))) について詳しく解説します。このコードは、整数iの各桁の和を計算するためのものです。この行を詳しく分解して説明します。

  • str(i):
    • この部分は、整数iを文字列に変換します。例えば、iが123の場合、str(i)"123"という文字列を返します。
  • map(int, str(i)):
    • map関数は、第二引数の各要素に第一引数の関数を適用します。この場合、str(i)の各文字(各桁)にint関数を適用して、それを整数に変換します。
    • 例えば、iが123の場合、map(int, str(i))は整数1, 2, 3を生成します。
  • sum(...):
    • sum関数は、引数として与えられたイテラブル(この場合はmapオブジェクト)のすべての要素の和を計算します。
    • 例えば、iが123の場合、sum(map(int, str(i)))は1 + 2 + 3 = 6を計算します。

次の問題へ

前の問題へ

一覧へ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

雇われのシステムエンジニアです。
普段は車載ECUのセキュリティー分野に従事しております。

コメント

コメントする

目次