takenoko03の日記

PHP言語で仕事する

PHP 問題:渋滞情報

-新しく学んだこと-

・複数行の標準入力

・foreachで繰り返し

・文字列の結合

 

問題:

ある道路の車の数と、各車の車間距離が与えられるので、車間距離が M メートル以下の場合を渋滞と定義したとき、渋滞の区間が合計で何メートルあるか求めてください。

 

入力は以下のルールがあります。

X Y

M-1

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,,,)

最初の配列の後に、追加する配列を連ねていきます。

今回は、$each_valueという空の箱に$value(入力された数字が入っている箱)内の数字を連ねていきます。