備忘録

Paiza CランクレベルアップメニューPHP『forループ』編 解答。


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";
}
?>
<?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"; } ?>
<?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";
}
?>
<?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"; } ?>
<?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の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; // ここで打ち切り
}
?>
<?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; // ここで打ち切り } ?>
<?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";
}
}
}
?>
<?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"; } } } ?>
<?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";//それぞれ参加者の解答出力する。
}
?>
<?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";//それぞれ参加者の解答出力する。 } ?>
<?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";//それぞれ参加者の解答出力する。
    }
?>

 

-備忘録

S