復習 - データの反復処理
CoddyのPHPジャーニー「基礎」セクションの一部。レッスン 53/71。
チャレンジ
簡単入力を3行読み取ります:
- カンマ区切りの整数のリスト(例:
12,5,8,20,3,15,7) - 最小しきい値
- 最大しきい値
arrayを処理して、range内にあるすべてのnumbersの合計(最小値と最大値の両方を含む)を求めます。まず、numberが最大しきい値のexactly doubleかどうかを確認し、そうであればbreakですぐに処理を停止します。それ以外の場合は、continueを使用してrangeの外側にあるnumbersをスキップします。
最初の行はexplodeで読み取られるため、$numbersには文字列が格納され、$minと$maxには整数が格納されます。各要素をしきい値と比較したり合計に加えたりする前に、intval()(または(int)キャスト)で変換してください。
2行を出力します:
- range内にあるvalid numbersの合計
- 合計に加えられたnumbersの個数
例1:
入力が5,12,8,20,15,3,10、5、15の場合、出力は次のようになります:
50
5(5 + 12 + 8 + 15 + 10 = 50、5つのnumbersがrange 5-15内にあります)
例2:
入力が2,8,12,20,6,14、5、10の場合、出力は次のようになります:
8
1(20は最大値10のdoubleであるため処理が停止します。その前に加えられたのは8だけなので、合計は8、個数は1です)
例3:
入力が1,2,3,4,5、10、20の場合、出力は次のようになります:
0
0(range 10-20内にあるnumbersはありません)
自分で試してみよう
<?php
// 入力を読み取る
$numbers = explode(',', trim(fgets(STDIN)));
$min = intval(trim(fgets(STDIN)));
$max = intval(trim(fgets(STDIN)));
// 変数を初期化する
$sum = 0;
$count = 0;
// TODO: ここにコードを書いてください
// numbers配列をループする
// 'continue'を使って範囲外の数値をスキップする(minからmaxまで含む)
// 最大閾値のちょうど2倍の数値に遭遇したら'break'を使う
// 有効な数値のsumとcountを追跡する
// 結果を出力する
echo $sum . "\n";
echo $count;
?>基礎のすべてのレッスン
自分で練習してみよう: PHPオンラインコンパイラ