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

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

新規登録して質問してみよう
ただいま回答率
85.35%
for

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

while

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

PHP

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

Q&A

解決済

5回答

3358閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

for

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

while

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

PHP

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

0グッド

0クリップ

投稿2018/05/30 02:24

編集2018/05/30 02:30

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

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

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

php

1<?php 2for($i=1;$i<=100;$i++){ 3 echo $i; 4 if($i%3==0){ 5 echo "Fizz"; 6 }elseif($i%5==0){ 7 echo "Buzz"; 8 }elseif($i%5==0 && $i%3==0){ 9 echo "FizzBuzz"; 10 } 11 echo "&nbsp;"; 12} 13?> 14 15<?php 16$a=1; 17$i=0; 18 19while(($a+$i)<=300){ 20 $s=($a+$i); 21 22echo $s."&nbsp;"; 23 24$a=$i; 25$i=$s; 26} 27 ?>

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

php

1 21 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 3 41 1 2 3 5 8 13 21 34 55 89 144 233 5

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

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 03:08

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/05/30 07:11

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

0

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

  • FizzBuzz

if文の順序を工夫しましょう

  • フィボナッチ

ループが300を超えないまで、なら、もう一回手動で回してやれば良いでしょう

投稿2018/05/30 02:43

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

PHP

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

投稿2018/05/30 03:16

yambejp

総合スコア116801

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2018/05/30 03:13

編集2018/05/30 09:16
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

PHP

1<?php 2for($i=1;$i<=100;$i++){ 3 echo $i; 4 if($i%5==0 && $i%3==0){ 5 echo "FizzBuzz"; 6 }elseif($i%3==0){ 7 echo "Fizz"; 8 }elseif($i%5==0){ 9 echo "Buzz"; 10 } 11 echo "&nbsp;"; 12} 13?>

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

PHP

1<?php 2for($i=1;$i<=100;$i++){ 3 echo $i; 4 if($i%3==0){ 5 echo "Fizz"; 6 } 7 if($i%5==0){ 8 echo "Buzz"; 9 } 10 echo "&nbsp;"; 11} 12?>

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

PHP

1<?php 2$a=1; 3$i=0; 4 5while(1){ 6 $s=($a+$i); 7 8 echo $s."&nbsp;"; 9 if($s>300) break; 10 11 $a=$i; 12 $i=$s; 13}

投稿2018/05/30 02:48

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問