最終更新日が2023年以前の記事です。レイアウト変更のため、正常に表示されない場合があります。
プログラミングを覚えたての人が(たぶん)誰もが一度は通る道、Fizz Buzz (フィズバズ)問題。元は言葉遊びのようなゲームをプログラミング問題として昇華させたようなもので、以下のような出力をするプログラムを書け、というのがFizz Buzz 問題の主旨です。
- 1からnまでの数を順に出力する。ただし、
- 3の倍数は代わりに”Fizz”を出力する
- 5の倍数は代わりに”Buzz”を出力する
- 3と5両方の倍数は代わりに”Fizz Buzz”を出力する
正解はこんな感じになります。
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, ...(以下略)
ここではJavaを使った解答を見ていきます。
必要な知識
環境の構築とかそういった部分はできているものとして、以下の構文は使える必要があります。
- for 文
- if-else 文
- 剰余計算 (a%b)
解答例
可読性を考えると、無理に目新しい構文を使おうとするより単純なfor, if文で書くのが良いでしょう。
public class Main {
public static void main(String[] args) throws Exception { //"おまじない"
for (int i = 1; i <= 100; i++) { //1~100で実行
if (i % 15 == 0) { //15の倍数の時, Fizz Buzz
System.out.print("Fizz Buzz, ");
} else if (i % 3 == 0) { //3の倍数の時, Fizz
System.out.print("Fizz, ");
} else if (i % 5 == 0) { //5の倍数の時, Buzz
System.out.print("Buzz, ");
} else { //3の倍数でも5の倍数でもない時, 数字をそのまま出力
System.out.print(i + ", ");
}
}
}
}
シンプルにこれで問題ありません。コピペフリーですので、自分の環境で実際に走らせてみるなど、ご自由にお使いください。
出力は冒頭に書いたものが出てくるはずです。
Javaを覚えたての方は2行目のの”おまじない”の部分がぱっと出てこないと思いますが、この辺りも慣れで徐々に出てくるようになりますし、IDE(統合開発環境)の設定やオートコンプリート機能に頼ってしまっても構わないと思います。
応用問題 ~4ケタの暗証番号~
twitterで何の気なしにこんないい加減なツイートをしたのですが。
これを真面目に考えてしまったこんな返信が来てしまいました。
中学受験問題にありそうな概観ですが、手計算でこれを解くのは結構厳しいです。
プログラマーならこう解く
プログラムを勉強した人間なら、これは数行かせいぜい十数行のプログラムで一発だな、と感じなければならないところです。練習問題として考えてみてください。
追加の知識として、論理演算子を使用します。
public class Main {
public static void main(String[] args) throws Exception {
int count = 0;
for (int i = 1000; i < 10000; ++i) {
if (i%2==0||i%3==0||i%5==0||i%7==0) {
continue;
}
if(i%13==0||i%17==0||i%19==0){
count++;
}
}
System.out.println("answer is " + count);
}
}
answer is 364
ということで答えは「364個」でした。