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

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

ただいまの
回答率

90.76%

  • PHP

    19196questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • for

    207questions

    for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

  • while

    72questions

    Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

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

解決済

回答 5

投稿 編集

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

退会済みユーザー

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • mts10806

    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で質問しよう!

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

関連した質問

  • 解決済

    phpファイルが表示されない

    次のようなphpコードを書いたのですが、ブラウザ上には何も表示されません。 <?php $fizz = htmpspecialchars($_POST['fizz']); $buz

  • 解決済

    FizzBuzz問題 javascript

    fizzbuzz問題(3の倍数の時"Fizz"を、5の倍数の時"Buzz"を、15の倍数の時"Fizz_Buzz"を出す)を解こうと思っているのですが、 ------------

  • 受付中

    fizz buzz問題について

    前提・実現したいこと fizz buzzについて質問です。 引数xの値が、 3の倍数ならば文字列"fizz"を画面に書き出し、 5の倍数ならば文字列"buzz"を画面に書き

  • 受付中

    おもしろ・特徴のある Fizz Buzz回答(たくさん)ください。

    数年前に流行して検索すれば死ぬほど出てくるFizzBuzzですが、 ルービックキューブに似て単純なだけにプログラマを惹きつけるのでしょうか。 なので、改めてあげるのもどうか

  • 解決済

    閏年の3月の最初の月曜日の日にちを計算

    1600年から2017年までの間で、いつが「うるう年」かと、「その年の”3月の最初の月曜日”は何日か」を表示するプログラムを書きたいのですが、どのように書けばいいかがわかりません。

  • 受付中

    c言語 フィボナッチ数列

    問題点 フィボナッチ数列と関数を呼び出した回数を求めるプログラムを書いたのですが、下記のプログラムでは関数を呼び出した回数がカウントされず次の部分 scanf("%d",&num)

  • 解決済

    PHPの条件式 if elseif 以上以下の指定ができません

     前提・実現したいこと 初心者です。 PHPでおみくじを作っています。 if elseif の条件式で数値の~以上~以下を指定中に以下のエラーメッセージが発生しました。 <は半角で

  • 解決済

    関数型JavaScriptのFizzBazz問題の最適化

    判定するdecision関数を最適化したいです。 いい方法はないですか? const min = 1 const max = 100 //計算式 let remainder

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

  • PHP

    19196questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • for

    207questions

    for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

  • while

    72questions

    Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

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