asort()関数
asort($array);
は、「キーを維持したまま」配列の中身を「昇順」に並べ替える。
配列の中で 最小値が、いくつあるか、カウントする方法
// 最小値が、いくつあるかカウントする方法 // 最小値 $minValue, 整数 $minValue = min($arr); $counts = array_count_values($arr); $result = $counts[$minValue];
この関数は、$arr 配列の それぞれの要素が、何個あるかを配列で表す関数。
キーは、$arr の要素 になる。
その上で、$counts 配列を、$counts[$minValue]
と使うと、
最小値($minValue)が index番号になり、その要素を表すことを意味する。
よって、$arr 配列の中において、最小値が、何個あるか数えることができる。
[$machineNum, $snackNum] = explode(' ', trim(fgets(STDIN))); $arr = []; for ($i = 0; $i < $machineNum; $i++) { $arr[] = trim(fgets(STDIN)); } // print_r($arr); // キーの数字+1 が、機械の番号を表す。 // 余りを算出する式 $arrLeft = []; // 各の 余り を格納する。 for ($i = 0; $i < $machineNum; $i++) { $left = $snackNum % $arr[$i]; $arrLeft[] = $left; } asort($arrLeft); // キーを維持したまま、昇順に並び替え // 最小値 $minValue, 整数 $minValue = min($arrLeft); // 最小値が、いくつあるかカウントする方法 $counts = array_count_values($arrLeft); $result = $counts[$minValue]; // $arrLeft のキー の配列を作る。その先頭の値が、最小値(順)になる。 $keys = array_keys($arrLeft); if ($result !== 1) { echo $keys[$result - 1] + 1; } else { echo $keys[0] + 1; }