質問: 作成したいプログラム 入力例が仮に、 3 2 1(左からa, b, cとする) 2 2 1 2 1 1 だとします。 cとa行目(1-3行目までのいずれ)の 1からb番目までの数字が一致した場合は、 手元に、1ポイント増えていきます。 期待する出力値 0 1 2 問題点 該当する数字が存在する行に移動すると、カウントが継続されてしまい、リセットされない。 実際の出力値 0 1 3 ``` ```
回答: 質問への追記・修正の依頼の欄にも書きましたが、下記の意味がわからないです。 > > $cと$a行目(1-3行目までのいずれ)の$b番目の数字が一致した場合は、 > > 手元に、1ポイント増えていきます。 > > > 期待する出力値 > > 0 > > 1 > > 2 > > > 各行の$b列目の値が$cと一致していたらポイントが増えるのであれば、各行の2列めである2, 2, 1が$cである1と一致するか評価され、出力は0, 0, 1になるのではないですか? というか、社会一般に通じる「ループのインデックスである整数値」を意味する *i* とかは別として、1文字変数は混乱のもとなので使わないでください。人に見せるコードならなおさらです。 以下のコードは、先述のわたしの理解が正しいという前提のものです。 ``` source)[$this->fgetsCount++]; } } $dummySTDIN = new DummySTDIN(); // NOTE: ここから上は気にしない // FIXME: ここから下の `$dummySTDIN->fgets()` を `fgets(STDIN)` に読み替えること // 与えられる文字列の1行目には、 // - 「検証する要素の行数」 // - 「各行において評価する値が格納されている列番号」 // - 「正答」 // がスペース区切りで与えられる list($rows_qty, $check_col, $answer) = explode(' ', $dummySTDIN->fgets()); // 列番号をインデックスになおす $check_col = intval($check_col, 10) - 1; $points = 0; for($row = 0; $row < $rows_qty; $row++) { // 検証中の行の値をスペースで区切って、 $check_col列の値を取得する $answer_in_this_row = explode(' ', $dummySTDIN->fgets())[$check_col] ?? NAN; // この行の値と正答値が一致するなら$pointsに加算する $points += $answer_in_this_row === $answer; // $pointsを出力する echo $points . PHP_EOL; } ```