1の位と10の位と……10000の位の数字を合計したい!ABC083B
目次
問題
回答
N,A,B=gets.split.map(&:to_i)
def calc(n)
res=0
while n>0
res+=n%10
n/=10
end
return res
end
ans=0
for i in 1..N
digit_sum=calc(i)
if A<=digit_sum and digit_sum<=B
ans+=i
end
end
puts ans
学んだ処理
他の方(cumet04様)の回答には文字列操作、配列操作をする解法が使われていて勉強になりました。
N, A, B = gets.split.map(&:to_i)
puts (0..N).select { |n|
sum = n.to_s.split("").map(&:to_i).sum
sum >= A && sum <= B
}.sum
1. 入力を受け取る
N, A, B = gets.split.map(&:to_i)
gets「入力を受け取り」
.split「スペースの区切りで1つ1つ分けて」
.map(&:to_i)「整数型で配列にして」
N, A, B =「3つの変数に代入する」
2. 整数の各桁の総和を計算
sum = n.to_s.split("").map(&:to_i).sum
配列(0..N) の要素の1つ1つについて、
.to_s「文字列にして、」
.split("")「各桁(0~9のどれか)を1つずつ」
.map(&:to_i)「整数の要素として配列にして」
.sum「その配列の要素を合計して」
sum = 「sumに代入する」
3. 配列から A <= sum <= B を満たす整数を選ぶ
puts (0..N).select { |n|
sum = n.to_s.split("").map(&:to_i).sum
sum >= A && sum <= B
}
sum >= A && sum <= B「sumの値が A <= sum <= B を満たす場合」
.select「sumを配列 |n| の要素として選び出す」
4. 配列 |n| の要素の合計を出力する
puts (0..N).select { |n|
sum = n.to_s.split("").map(&:to_i).sum
sum >= A && sum <= B
}.sum
.sum「配列 |n| の要素の合計を返す」
puts 「合計を出力する」