

Yj
こんにちは!!引き続き解答をご覧ください。☺️
STEP: 1 3の倍数のカウント
<?php
$n = trim(fgets(STDIN));
$a = explode(" ", trim(fgets(STDIN)));
$count = 0;
for($i = 0 ; $i< $n; $i++){
if($a[$i] % 3 == 0){
$count ++;
}
}
echo $count . "\n";
}
?>
STEP: 2 フラグ管理
下記の問題はin_array( )関数を使いました。こちら参考にしました。
<?php
$n = trim(fgets(STDIN));
for($i =0; $i < $n; $i++){
$a[] = trim(fgets(STDIN));
}
$search = 7;
$key = in_array($search, $a);//$a配列に$searchが含まれているか確認する
if ($key){
echo "YES\n";
}else{
echo "NO\n";
}
?>
STEP: 3 インデックス取得
下記の問題はcontinueとbreakを使いました。こちら参考にしました。
<?php
//入力例1の場合
$n = trim(fgets(STDIN)); //2
for($i=1; $i<=$n; $i++){ //1 から n まで番号が付けられた人々
$a = trim(fgets(STDIN)); //5 6
$list[$i] = $a;
}
$k = trim(fgets(STDIN));//6
// 検索処理
foreach ($list as $key=>$value) { //[1]=>5 [2]=>6
if ($value !== $k)continue; //2つが同じではなければ飛ばす
echo $key . "\n"; //最も小さい番号で財産が k 円の人を出力
break; // ここで打ち切り
}
?>
STEP: 4 多重ループ
下記の問題は以前も参照しました。strpos( )を使いました。こちら参考にしました。
<?php
//入力例2の場合
$m = trim(fgets(STDIN));//2の文字
for($i=0; $i<$m; $i++){ $m_list[] = trim(fgets(STDIN));//[0] => c //[1] => d
}
$n = trim(fgets(STDIN));//2の文字列
for($j=0; $j<$n; $j++){ $n_list[] = trim(fgets(STDIN));//[0] => cat //[1] => dog
}
for($i=0; $i<$m; $i++){
for($j=0; $j<$n; $j++){
if(strpos($n_list[$j], $m_list[$i]) !== false){
echo "YES\n";
}else{
echo "NO\n";
}
}
}
?>
FINAL問題 forループ
下記の問題のポイントは$countを初期化する。っですね。
<?php
//入力例2の場合
list($n, $m, $k) = explode(" ", trim(fgets(STDIN)));//$n=参加者数 //$m=解答数 //$k=解答
for($i=0; $i<$n; $i++){//参加者分loopこの時4回。
$each_ans = explode(" ", trim(fgets(STDIN)));
$count = 0;//それぞれの解答出力する為、1人の解答終了後に初期化。
for($j=0; $j<$m; $j++){ //解答数は5つ。
if($each_ans[$j] == $k){ //解答の2が一致するか確認。
$count++;//解答の2がいくつあるかカウントする。
}
}
echo $count . "\n";//それぞれ参加者の解答出力する。
}
?>