フィズバズ問題(FizzBuzz問題)
プログラミングの問題(課題)だよ
「1から100までの数字を画面に表示する」「3の倍数のときは数字の代わりにFizzと表示する」「5の倍数のときは数字の代わりにBuzzと表示する」「15の倍数のときは数字の代わりにFizzBuzzと表示する」プログラムを組ませるよ
基本的なプログラミング力があるか見極めたいときに出されたりするよ
縛りを入れることで難易度を上げて遊ぶ人もいるよ
簡単に書くよ
フィズバズ問題(FizzBuzz問題)(読:フィズバズモンダイ 英:FizzBuzz)とは
そいつの実力を測るために出されたりするプログラミングの問題のひとつ
であり
「1から100までの数字を画面に表示する。ただし、3の倍数のときは数字の代わりにFizzと表示し、5の倍数のときは数字の代わりにBuzzと表示し、15の倍数のときは数字の代わりにFizzBuzzと表示する」プログラムを組んでみろやぁ!な問題のこと
です。
詳しく書くよ
サクっと一言で説明すると
1.1から100までの数字を画面に表示する
2.数字が3の倍数のときは数字の代わりに「Fizz」と表示する
3.数字が5の倍数のときは数字の代わりに「Buzz」と表示する
4.数字が15の倍数のときは数字の代わりに「FizzBuzz」と表示する
プログラムを組んでみろ!な問題(課題)が「FizzBuzz問題」です。
基本的なプログラミング力があるか確認したいときとかに出題されます。
実際のところ、問題としての難易度は高くありません。
ある程度プログラミングできる人なら普通に解けるでしょう。
だからこそ、解けるか解けないでプログラミングの基礎が分かっているかを(ある程度)判断できます。
また、プログラミングというのは同じ処理でもいろいろな書き方ができます。
どのような書き方をするかで、その人の技術レベルを推測できたりもします。
あとは「〇〇の書き方は禁止!」のような縛りを付けて難易度を上げたり、どれだけ短い書き方ができるかを競ったり、お遊び的に出題されることもあるようです。
……というのがFizzBuzz問題の大雑把な説明です。
プログラミングの基礎ができているか確認したり、遊んだりするための「プログラミングの問題(課題)」ね。
以上でFizzBuzz問題自体の説明は終わりですが、せっかくなので、FizzBuzz問題の答えとなるコードのサンプルをいくつか載せておきます。
「手元に動かす環境があったから」という理由でPHPで書きましたが、日本語で補足説明を入れてあるので、PHPが分からない人でも何をやっているかは把握できると思います。
まずは一番、素直な書き方です。
<?php
for($i = 1; $i <?= 100; $i++){ //1から100までループ
if($i % 15 == 0){
//15で割った余りが0(=15の倍数)のとき
//「FizzBuzz」を表示する
print "FizzBuzz";
}else if($i % 3 == 0){
//3で割った余りが0(=3の倍数)のとき
//「Fizz」を表示する
print "Fizz";
}else if($i % 5 == 0){
//5で割った余りが0(=5の倍数)のとき
//「Buzz」を表示する
print "Buzz";
}else{
//15の倍数でも3の倍数でも5の倍数でもないとき
//数字を表示する
print $i;
}
//見やすくするために空白を入れておきます
print " ";
}
次は15の倍数か否かの判定を外してみましょうか。
<?php
for($i = 1; $i <= 100; $i++){ //1から100までループ
//出力するやつ
$output = "";
if($i % 3 == 0){
//3で割った余りが0(=3の倍数)のとき
//「Fizz」をくっつける
$output = $output . "Fizz";
}
if($i % 5 == 0){
//5で割った余りが0(=5の倍数)のとき
//「Buzz」をくっつける
$output = $output . "Buzz";
}
if($output == ""){
//「Fizz」も「Buzz」もなかったら
//出力するやつに数字を入れる
$output = $i;
}
//出力
print $output . " ";
}
個人的には好きではない書き方ですが、三項演算子というのを使って判定と表示をまとめてやることもできます。
<?php
for($i = 1; $i <= 100; $i++){ //1から100までループ
//ゴチャゴチャやって出力
print ($i % 15 == 0 ? "FizzBuzz" : ($i % 3 == 0 ? "Fizz" : ($i % 5 == 0 ? "Buzz" : $i))) . " ";
}
最後に「発想力は認めるけど、おまえ、プログラミングできないだろ」な書き方もしてみましょうか。
<?php
//出力用配列
$output = array(
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
"FizzBuzz",
"16",
"17",
"Fizz",
"19",
"Buzz",
"Fizz",
"22",
"23",
"Fizz ",
"Buzz",
"26",
"Fizz",
"28",
"29",
"FizzBuzz",
"31",
"32",
"Fizz",
"34",
"Buzz",
"Fizz",
"37",
"38",
"Fizz",
"Buzz",
"41",
"Fizz",
"43",
"44",
"FizzBuzz",
"46",
"47",
"Fizz",
"49",
"Buzz",
"Fizz",
"52",
"53",
"Fizz",
"Buzz",
"56",
"Fizz",
"58",
"59",
"FizzBuzz",
"61",
"62",
"Fizz",
"64",
"Buzz",
"Fizz",
"67",
"68",
"Fizz",
"Buzz",
"71",
"Fizz",
"73",
"74",
"FizzBuzz",
"76",
"77",
"Fizz",
"79",
"Buzz",
"Fizz",
"82",
"83",
"Fizz",
"Buzz",
"86",
"Fizz",
"88",
"89",
"FizzBuzz",
"91",
"92",
"Fizz",
"94",
"Buzz",
"Fizz",
"97",
"98",
"Fizz",
"Buzz"
);
foreach($output as $value){ //配列の要素を1つずつ取り出す
//出力
print $value . " ";
}
いかがでしょう。
いろいろな書き方ができますよね。
内容が単純だからこそ、個性が浮き彫りになる問題です。
一言でまとめるよ
まぁ「FizzBuzz問題」って単語が出てきたら「『1から100までの数字を画面に表示する。ただし、3の倍数のときは数字の代わりにFizzと表示し、5の倍数のときは数字の代わりにBuzzと表示し、15の倍数のときは数字の代わりにFizzBuzzと表示する』プログラムを作りなさい!な問題なんだな~」と お考えください。






