Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

paizaの問題(Dランク)でわからない問題があります😭(php)

解決したいこと

paizaの行ごとに要素数の異なる整数列の入力 (paizaランク D 相当)で詰まっています。
出力される値は合っているのに、半角スペースがない(?)のが原因でコードが不正解になってしまいます。

この問題の考え方、コードの修正をお願いしたいです。よろしくお願いします。
 
  

条件と求めていること

スクリーンショット 2022-01-23 12.11.29.jpg
スクリーンショット 2022-01-23 12.19.23.jpg

こんな結果が出力されます

結果
結果は以上のようになりました。

該当するソースコード

コードは以下のようなコードを書きました。(下手なコードですみません🙇‍♂️)

<?php
    $input_line = explode(" ",trim(fgets(STDIN)));

    $N = $input_line[0];

    for($i=0;$i<$N;$i++){
    $test = trim(fgets(STDIN));
    $test_number = explode(" ",$test);
    $keta = $test_number[0];

        for($j=1;$j<=$keta;$j++){
            echo "$test_number[$j]";
        }
    echo "\n";
    }
?>

やっていること 

$Nに標準出力で得られる値のNを代入している。

forで$Nだけ回して、標準出力の値を$testに1行ずつ代入する。

$ketaに標準出力の値を代入する。

for文でその$ketaの回数だけ回して、値を出力していく

だめでした。

自分で試したこと

・echo $test_number[$j]の後に半角スペースをつけてみる。→❌
$test_numberのexplodeなしでやってみる → $jの値と一致しなかったので、値が全て出力されない

0

1Answer

自分で試されたことの中に,echo "$test_number[$j]"の後に半角スペースをつけてみるのがダメだったそうですが,もしかしたら最後の数字を出力した後も半角スペースがついたりしていませんでしたか?
すなわち,

8[半角スペース]
8[半角スペース]1[半角スペース]
8[半角スペース]1[半角スペース]3[半角スペース]

のように出力していませんでしたか?
Paizaでは期待する出力の欄に記述がある通り,「末尾に改行を入れ,余計な文字や空行を含んではいけません.」となっています.

半角スペースも余計な文字であると判断されてしまうため,ダメだったと考えられます.

改善案

最後の数字の出力のときだけ半角スペースを結合しない.

改善案
<?php
    $input_line = explode(" ", trim(fgets(STDIN)));
    $N = $input_line[0];
    
    for ($i = 0; $i < $N; $i++) {
        $test = explode(" ", trim(fgets(STDIN)));
        $keta = $test[0];
        for ($j = 1; $j < $keta; $j++) {
            echo $test[$j] . " ";
        }
        echo $test[$keta] . "\n";
    }
?>
1Like

Comments

  1. Markdownの中で$を用いると,$で囲まれた範囲が数式として扱われるため,Hiroto0706さんの質問の一部が数式扱いになってしまっていますね,phpの変数は$が付くため厄介ですので,`(バッククオート)を3つ用いて```$i```のように書くと数式モードが発動しなくて見やすい記事/質問が書けると思います.
  2. 改善策とご指摘ありがとうございます!!🙇‍♂️
    一度PondVillegeさんの改善案を試してみたいと思います!
    $関しては気づいていませんでした!!笑
    自分で試したことの内容がたしかに数式になっちゃってますね笑
    また、後で訂正します!
  3. PondVillegeさんの提供してくださったコードの通りに行ったところ、確かに実行することができました!ありがとうございました!
    確かに僕の書いたコードだと、値の後に無駄なスペースがついてしまいます。それが原因で実行できなかったのですね!
    for文で$ketaより小さい値まで回してfor文の後にechoで$test[$kata]を出力するのは思いつきませんでした!
    丁寧でわかりやすい解説と$のご指摘ありがとうございました!これからもプログラミングの勉強を頑張りたいと思います!🔥
  4. 正答できたとのこと,良かったです!
    こういう小さなひらめきやテクニックを習得して成長していくことを嬉しく思います.
    これからも頑張ってください!

Your answer might help someone💌