質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.93%

ループ処理で数字を文字列に置き換える方法とフィボナッチ数列で300を"超えるまでの"数列を表示させたいです。

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,455
退会済みユーザー

退会済みユーザー

1から順番に数を表示する(100まで)
その数が3で割り切れるなら"Fizz",5で割り切れるなら"Buzz",両方で割り切れるなら"FizzBuzz"と表示する。
つまり、1 2 Fizz 4 Buzz …という風に100まで出力したいです。

フィボナッチ数列についてはタイトルの通り、300を"超えるまで"表示したいです。

 自分の書いたコードです。

<?php
for($i=1;$i<=100;$i++){
    echo $i;
  if($i%3==0){
    echo "Fizz";
  }elseif($i%5==0){
    echo "Buzz";
  }elseif($i%5==0 && $i%3==0){
    echo "FizzBuzz";
  }
  echo "&nbsp;";
}
?>

<?php
$a=1;
$i=0;

while(($a+$i)<=300){
  $s=($a+$i);

echo $s."&nbsp;";

$a=$i;
$i=$s;
}
 ?>

それぞれの出力結果です。 

1 2 3Fizz 4 5Buzz 6Fizz 7 8 9Fizz 10Buzz 11 12Fizz 13 14 15Fizz 16 17 18Fizz 19 20Buzz 21Fizz 22 23 24Fizz 25Buzz 26 27Fizz 28 29 30Fizz 31 32 33Fizz 34 35Buzz 36Fizz 37 38 39Fizz 40Buzz 41 42Fizz 43 44 45Fizz 46 47 48Fizz 49 50Buzz 51Fizz 52 53 54Fizz 55Buzz 56 57Fizz 58 59 60Fizz 61 62 63Fizz 64 65Buzz 66Fizz 67 68 69Fizz 70Buzz 71 72Fizz 73 74 75Fizz 76 77 78Fizz 79 80Buzz 81Fizz 82 83 84Fizz 85Buzz 86 87Fizz 88 89 90Fizz 91 92 93Fizz 94 95Buzz 96Fizz 97 98 99Fizz 100Buzz  

1 1 2 3 5 8 13 21 34 55 89 144 233 

よろしければご回答をお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/05/30 11:33

    現在のコードで起きている問題、分からないことは何でしょうか。 https://teratail.com/help/question-tips#questionTips3-4

    キャンセル

回答 5

checkベストアンサー

+1

15のところはFizzBuzzと表示されるべきなのに、15Fizzとなっています。この部分に問題があると考えられます。

そこで、条件判定の部分(以下のコード)みてみると

  echo $i;
  if($i%3==0){
    echo "Fizz";
  }elseif($i%5==0){
    echo "Buzz";
  }elseif($i%5==0 && $i%3==0){
    echo "FizzBuzz";
  }
  echo "&nbsp;";


1)数を無条件に表示している(3,5,15の倍数の場合には、数は表示せずに、Fizz,Buzz,FizzBuzzを表示するべき)
2)先に「3で割り切れる」「5で割り切れる」でFizzやBuzzを表示しているので、FizzBuzzが表示される可能性が無い(15の倍数は、3の倍数で5の倍数でもある)
という問題があるのが判ります。

こうした問題の解決方法は、
1)の問題は、Fizz,Buzz,FizzBuzzを表示しない時だけ数を表示するようにする。
2)の問題は、最初に15で割り切れるかどうかの判断をするようにする。

これらを上記のコードに反映すると

  if($i%5==0 && $i%3==0){ //最初に15の倍数かどうか判断
    echo "FizzBuzz";
  }elseif($i%3==0){
    echo "Fizz";
  }elseif($i%5==0){
    echo "Buzz";
  }else{ // 3,5,15の倍数ではなかった
    echo $i;  //数字を表示
  }
  echo "&nbsp;";

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/30 16:11

    ご回答ありがとうございました。ベストアンサーに選ばせていただきました。
    また機会があればよろしくお願いします。

    キャンセル

+1

直接の回答を出してしまうのは面白くないのでヒントのみ。

  • FizzBuzz
    if文の順序を工夫しましょう
  • フィボナッチ
    ループが300を超えないまで、なら、もう一回手動で回してやれば良いでしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

まず最初の問題は、FizzBuzzの条件が最後にあるので、そこに到達することができません。
最初に持ってくれば解決です。

<?php
for($i=1;$i<=100;$i++){
    echo $i;
  if($i%5==0 && $i%3==0){
    echo "FizzBuzz";
  }elseif($i%3==0){
    echo "Fizz";
  }elseif($i%5==0){
    echo "Buzz";
  }
  echo "&nbsp;";
}
?>


もしくはelseifをやめてFizzとBuzzをそれぞれ判定するようにするか。

<?php
for($i=1;$i<=100;$i++){
    echo $i;
    if($i%3==0){
        echo "Fizz";
    }
    if($i%5==0){
        echo "Buzz";
    }
    echo "&nbsp;";
}
?>


次の問題は、ループ条件で300を閾値にしてしまうとよろしくないので、計算結果が300を超えたらループを抜けるようにすればよいでしょう。

<?php
$a=1;
$i=0;

while(1){
    $s=($a+$i);

    echo $s."&nbsp;";
    if($s>300) break;

    $a=$i;
    $i=$s;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

プログラム的にはこんな感じでも

$r=range(0,100);
foreach([3=>"Fizz",5=>"Buzz",15=>"FizzBuzz"] as $key=>$val1){
  foreach(range($key,100,$key) as $val2){
    $r[$val2]=$val1;
  }
}
unset($r[0]);
print implode(",",$r);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

変数で指定されていない問題は固定出力すべき

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • PHPに関する質問
  • ループ処理で数字を文字列に置き換える方法とフィボナッチ数列で300を"超えるまでの"数列を表示させたいです。