標準入力をループで処理
テクノロジ系 / loop (for / while / break / continue)
標準入力をループで処理
Lesson 3 / Chapter 6
よくある入力形式
3 りんご みかん ぶどう
- 1 行目に 件数 N
- 2 行目以降に N 行のデータ
この形式は競技プログラミングや paizaLMS でも頻出。
件数 N を読んで N 回ループ
<?php
$n = (int) trim(fgets(STDIN));
for ($i = 0; $i < $n; $i++) {
$line = trim(fgets(STDIN));
echo $line . "\n";
}- まず 1 行目で N を読む
forで N 回ループ- 各回で
fgets(STDIN)を 1 回呼ぶ - 読んだ値を使う / 配列に貯める
配列に貯める
<?php
$n = (int) trim(fgets(STDIN));
$lines = [];
for ($i = 0; $i < $n; $i++) {
$lines[] = trim(fgets(STDIN));
}$lines = [];で空の配列を用意$lines[] = ...;で末尾に追加- N 回ループしたら N 個の要素が入っている
合計を計算する
<?php
$n = (int) trim(fgets(STDIN));
$sum = 0;
for ($i = 0; $i < $n; $i++) {
$sum += (int) trim(fgets(STDIN));
}
echo $sum . "\n";$sum = 0;で 0 から始める- ループの中で
$sum += ...;で足していく - 最後に
$sumを出力
array_sum($arr) で配列の合計を一発で計算する書き方もある。
最大値を計算する
<?php
$n = (int) trim(fgets(STDIN));
$values = [];
for ($i = 0; $i < $n; $i++) {
$values[] = (int) trim(fgets(STDIN));
}
echo max($values) . "\n";- 一旦配列に貯める
max($values)で配列の最大値を取得
ループの中で「これまでの最大」を更新していく書き方もある:
$best = PHP_INT_MIN;
for (...) {
$v = (int) trim(fgets(STDIN));
if ($v > $best) $best = $v;
}このチャプターでできるようになること
✅ 「N 行のデータ」を for ループで読める
✅ 読んだ値を配列に貯められる
✅ 合計を計算できる
✅ 最大値を max() で取得できる
→ ドリルへ
考えてみよう
既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。
ドリル 01 — N 行をそのまま出力
問題
1 行目に整数 N、2 行目以降に N 行のテキストが入力されます。
N 行のテキストをそのまま 1 行ずつ出力してください。
入力例:
3 apple banana cherry
期待される出力:
apple banana cherry
採点
php scripts/grade.php topics/loop/ch06-loop-with-input/drill/01-read-n-lines/
ヒント
$n = (int) trim(fgets(STDIN));で件数を読むfor ($i = 0; $i < $n; $i++)で N 回ループ- 各回で
$line = trim(fgets(STDIN)); echo $line . "\n";
ドリル 02 — N 個の整数の合計
問題
1 行目に整数 N、2 行目以降に N 個の整数が 1 行ずつ入力されます。
N 個の整数の合計を出力してください。
入力例:
5 1 2 3 4 5
期待される出力:
15
採点
php scripts/grade.php topics/loop/ch06-loop-with-input/drill/02-sum-n-numbers/
ヒント
$n = (int) trim(fgets(STDIN));で件数を読む$sum = 0;で合計用変数for ($i = 0; $i < $n; $i++) { $sum += (int) trim(fgets(STDIN)); }- 最後に
echo $sum . "\n";
ドリル 03 — N 個の整数の最大値
問題
1 行目に整数 N、2 行目以降に N 個の整数が 1 行ずつ入力されます。
N 個の整数の 最大値 を出力してください。
入力例:
5 3 17 9 42 8
期待される出力:
42
採点
php scripts/grade.php topics/loop/ch06-loop-with-input/drill/03-max-of-n/
ヒント
$n = (int) trim(fgets(STDIN));で件数を読む$values = [];を用意して、N 個の整数を$values[] = ...;で貯めるecho max($values) . "\n";で最大値を出力- (別解) ループの中で「これまでの最大」を更新していく書き方でもよい