// 回答者の数、設問の数 list($numOfPeople, $numOfQue) = explode(' ', trim(fgets(STDIN))); $arr = []; for($i = 0; $i < $numOfPeople; $i++) { $arr[] = explode(' ', trim(fgets(STDIN))); } // var_dump($arr[1][0]); // string型 $newArr = []; // 数値でない場合、XXX に置換して、新しい配列を作る。 foreach ($arr as $subArr) { $newSubArr = []; foreach ($subArr as $val) { if (!is_numeric($val) || !calNumZeroOrHundreds($val)) { $val = 'XXX'; } $newSubArr[] = $val; } $newArr[] = $newSubArr; } // print_r($newArr); // 0 <= N <= 100 以外は、切り捨てる。 function calNumZeroOrHundreds(float $num): bool { if($num < 0 || 100 < $num) { return false; } return true; } // 設問ごとの配列に直す。つまり、縦列の配列に並び替える。 $arrColumn = []; for($i = 0; $i < $numOfPeople; $i++) { foreach ($newArr[$i] as $key => $value) { if (!isset($arrColumn[$key])) { $arrColumn[$key] = []; } $arrColumn[$key][] = $value; } } // print_r($arrColumn); // 各サブ配列の平均値を出して、出力して完成。 $avgs = []; foreach ($arrColumn as $subArray) { $sum = 0; $count = 0; foreach ($subArray as $value) { if (is_numeric($value)) { $sum += $value; $count++; } } $avgNum = ($count > 0) ? $sum / $count : 0; echo floor($avgNum) . PHP_EOL; }