phpの質問です


<?php
list($a,$b)=explode(" ",fgets(STDIN));
for($c=$b;$c<($a+$b);$c++){
}
?>

を実行するとtime limit exceededと出ます なぜでしょうか?

ちなみに入力は
6 3
3 2
1 6
です

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2016/11/11 01:00:03

回答1件)

id:Izkgkf0CPUsl85gi0dBq

質問文を編集しました。詳細はこちら

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

を実行するとtime limit exceededと出ます なぜでしょうか?

  • explode で標準入力をばらした $a、$b の型は文字列
  • デリミタは空白なので、$b の末尾には改行文字が入ってる
  • php の ++ 単項演算子は、文字列にも適用できるのでエラーにならない
  • ++ が対応しているのはASCII 文字と数字 (a-z、A-Z、そして 0-9) のみがサポートされ、それ以外の文字が入ってると元の文字列は変更されない
  • $c は、文字列 "3\n" のまま変わらないので無限ループ
  • 実行時間を使い果たして time limit exceeded


きっと、数字としてループさせたいと思うので、intval 関数を使って数値に変換すれば良いと思います。

<?php
list($a,$b)=explode(" ",fgets(STDIN));
$a = intval($a);    // ★文字列を数値に変換
$b = intval($b);    // ★こっちも
for($c=$b;$c<($a+$b);$c++){
    var_dump($c);
    ...
}
?>
id:Izkgkf0CPUsl85gi0dBq

わかりやすいご回答ありがとうございました。
大変ありがとうございました。

2016/11/04 15:50:49

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません