0
0

paizaレベルアップ問題集 標準出力メニュー【行によって長さが違う二次元配列の表示】FINAL問題 すべての行の長さと値が不定な 2 次元配列の出力 (paizaランク B 相当) 解答例

Posted at

PHPで回答。コード公開可とのことなので復習も兼ねて共有します。
問題文

解答例1

<?php
    [$n, $m] = explode(" " , rtrim(fgets(STDIN))); //配列の短縮記法により複数の変数に一括代入
    $array_a = explode(" " , rtrim(fgets(STDIN))); //配列A
    $array_b = explode(" " , rtrim(fgets(STDIN))); //配列B
    
    $index = 0; //配列Aから要素を1つずつ取り出すためのインデックス番号
    foreach($array_b as $b){
        for($i = 0; $i < $b; $i++){ //各要素について$b(M)回for文を回す
            echo $array_a[$index]; //変数$indexはforeachの外にあるのでリセットされない
            if($i + 1 == $b){ 
                echo "\n"; //行の終点なら、改行する
            }else{
                echo " "; //行の終点でなければ、半角スペースを出力
            }
            $index += 1; //インデックス番号を更新
        }
    }
?>

解答例2

<?php
    [$n, $m] = explode(" " , rtrim(fgets(STDIN))); //一括代入
    $array_a = explode(" " , rtrim(fgets(STDIN))); //配列A
    $array_b = explode(" " , rtrim(fgets(STDIN))); //配列B
    
    $start = 0; //行の始点を設定
    for($i = 0; $i < $m; $i++){ //for文をM回(配列Bの要素数分)回す
        $end = $start + $array_b[$i] - 1; //行の終点を設定(最初は配列Bの1つ目の要素数、インデックス番号と比較するため-1)
        for($j = $start; $j <= $end; $j++){ //行の始点(最初は0)から終点まで
            echo $array_a[$j]; //配列Aから1つずつ要素を取り出し出力していく
            if($j < $end){
                echo " "; //行の終点でなければ、半角スペースを出力
            }else{
                echo "\n"; //行の終点ならば、改行する
            }
        }
        $start = $end + 1; //始点を更新
    }
?>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0