競技プログラミング

ABC083B – Some Sums

https://atcoder.jp/contests/abs/tasks/abc083_b

イントロダクション

今回は、AtCoderの問題、「10進法での各桁の和」に取り組んでみます。Swift言語を使用して、数値の特性と基本的なループ処理を利用してこの問題を解決します。

問題の詳細説明

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

問題の要素解説

この問題は基本的な制御フローと整数の性質を理解することで解決できます。1からNまでの各整数について、その各桁の和が指定の範囲に収まるかをチェックし、該当する数の総和を求めます。

解答戦略

  1. Swiftで整数の各桁の和を計算する方法を学びます。
  2. 標準入力からN, A, Bを読み込みます。
  3. 1からNまでの各整数について、その各桁の和がA以上B以下であるかをチェックします。
  4. 条件を満たす数の総和を求めて出力します。

コードの解説

まず、標準入力からN, A, Bを読み込みます。次に、1からNまでの各整数について、その各桁の和を計算し、その和がA以上B以下であるかをチェックします。条件を満たす数の総和を求めて出力します。

コード全文

以下にコードの全文を示します:

import Foundation

let inputs = readLine()!.split(separator: " ").map { Int($0)! }
let (N, A, B) = (inputs[0], inputs[1], inputs[2])

var total = 0
for i in 1…N {
let sumOfDigits = String(i).compactMap { $0.wholeNumberValue }.reduce(0, +)
if A <= sumOfDigits && sumOfDigits <= B {
total += i
}
}
print(total)

考察と最適化

この問題は比較的シンプルであり、今回のアプローチで効率的に解決できます。より複雑なケースでは、他のデータ構造を用いる可能性があります。

結論

今回の問題はSwiftの基本的なループ処理と整数の性質を用いて解決しました。競技プログラミングは問題解決スキルを磨くのに非常に役立つと感じています。

コメントとフィードバックの募集

コメントやフィードバックをお待ちしております。お気軽にご意見をお寄せください。

COMMENT

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