PHP 問題:渋滞情報
-新しく学んだこと-
・複数行の標準入力
・foreachで繰り返し
・文字列の結合
問題:
ある道路の車の数と、各車の車間距離が与えられるので、車間距離が M メートル以下の場合を渋滞と定義したとき、渋滞の区間が合計で何メートルあるか求めてください。
入力は以下のルールがあります。
X Y
M-2
・・・
M-[N-1]
1行目には、車の数Xと渋滞になる距離が半角スペースで区切られます。
2行目からは、先頭から数えてM番目とM+1番目の車間間隔を表します。
入力例1
5 10
5
6
25
4
答え
15
プログラミングの前に動きのイメージをします。
プログラムに直すと
4行目:カウントを用意します。今回は、車間距離が入力の2行目から始まるので2を入れています。
5行目:車間距離の合計用の箱を用意します。
6行目:入力が終わるまで{}内の命令を繰り返します。
7行目:入力を$num_arrayに入れます。
$num_array[0] = 5 10
$num_array[1] = 5
$num_array[2] = 6
$num_array[3] = 25
$num_array[4] = 4
となります。
9行目:$each_valueという箱を用意します。今回は、$num_array[0] = 5 10を、5と10に分けるために用意しました。
10行目:中身が無くなるまで繰り返し、$valueの箱に$num_arrayの数字を移します。
11行目:$valueの中身に空白があれば区切り、$each_valueの箱へ入れます。
$each_value[0] = 5
$each_value[1] = 10
$each_value[2] = 5
$each_value[3] = 6
$each_value[4] = 25
$each_value[5] = 4
となります。
13行目:カウント(~番目の車)が車の数より小さい間は、{}内の命令を繰り返します。
14行目:車両間隔が渋滞距離以下かを判断します。
15行目:車両間隔が渋滞距離以下ならば、合計に車両間隔を加算していきます。
17行目:カウントに+1していきます。次の$each_value[]を参照するため。
・複数行の標準入力
まず、入力された数字を1行ごとに分けてから、空白が有るなら区切り、1種類の箱に結合していきます。
今回は、1行目の数字が空白で区切られていること、複数行の入力があることから、
6行目~12行目の命令をしています。
・foreach(要素を取り出す配列,取り出した要素を格納する変数)
配列の要素の数だけ命令を繰り返します。
今回は、$num_arrayの数字を$each_valueの箱に入れています。
・array_merge(最初の配列名,追加する配列1,追加する配列2,,,)
最初の配列の後に、追加する配列を連ねていきます。