【ループメニュー1】> 【数列同士の引き算】STEP: 2 数列の A 番目から B 番目までの和 (paizaランク D 相当) [難易度: 1196 ±23]
※リンク先へ移動するためには[paiza]へのログインが必要です。
長さ N の数列 a (a_1, a_2, ..., a_N) と、整数 A, B が与えられます。
この数列の a_A から a_B までの和を計算し、出力してください。
入力値(例)
5 1 3
1 2 3 4 5
出力値(例)
6
解答例
1 2 3 4 5 6 7 |
<?php list($n, $a, $b) = explode(" ", trim(fgets(STDIN))); $input = explode(" ", trim(fgets(STDIN))); $slice_num = array_slice($input, ($a - 1), ($b - ($a - 1))); echo array_sum($slice_num); ?> |
解説
1行目に2行目の数列の長さである整数Nとその数列の何番目から何番目を取り出すのかの整数A,Bがあるので受け取ります。
次に2行目の数列をexplode()で一つずつ値を受け取ります。
array_slice()で配列の切り取り位置を指定します。
5 1 3 の場合は、1(a)から3(b)になるのですが配列は0から始まるので(-1)にします。
array_slice(配列, 開始位置 [, 要素数])
第一引数 array(必須):配列
第二引数 offset(必須):切り取る配列の0から数えた開始位置
第三引数 length(任意):切り取る件数を指定
第四引数 preserve_keys(任意):取得した配列のキーを0からの連番にするか、元のキーを参照するかを指定
最後に、スライスした配列を合計して出力します。
感想
最初、array_slice()の第三引数の考え方が間違っていて、array_slice($input, ($a - 1), $b))としていたらテスト4が通過しなくて75点でした。第三引数はいくつ切り取るかなのでBから(A - 1)を引くと切り取る数が算出できます。
ループ問題なのにループを使わなかったのはいいのかな?...(*'ω'*)