FizzBuzz

%演算子を使わないとか、for文を使わないとか4通りのやり方で。

%演算子を使わないとか、for文を使わないとか4通りのやり方で。

  • タグ:
  • タグはありません
/*
 * 1〜50の数字でFizzBuzzやる。
 * 
 * ルール
 * 1〜50の数字を総なめし
 * 3で割り切れる数字->Fizz
 * 5で割り切れる数字->Buzz
 * 3と5のどちらでも割り切れる数字->FizzBuzz
 * それ以外の場合は数字をそのまま出力する。
 * 
 * 実行結果
 * 1
 * 2
 * Fizz
 * 4
 * Buzz
 * Fizz
 * 7
 * 8
 * Fizz
 * 以下略
 * 
 */
public class FizzBuzz {
	private static final int NUM_BGN = 1;
	private static final int NUM_END = 50;

	public static void main(String[] args) {
		System.out.println("FizzBuzzやるよー^q^");
		System.out.println("--基本--");
		std();
		System.out.println("--ループ使わない--");
		recursive(NUM_BGN);
		System.out.println("--%演算子使わない--");
		unuseMod();
		System.out.println("--ヘソ曲がり用--");
		dataTable();
	}

	private static void std() {
		// スタンダード版
		for (int i = NUM_BGN; i <= NUM_END; i++) {
			if (i % 15 == 0) { // 3でも5でも割り切れるのは15の倍数
				System.out.println("FizzBuzz");

			} else if (i % 3 == 0) {
				System.out.println("Fizz");
			
			} else if (i % 5 == 0) {
				System.out.println("Buzz");
			
			} else {
				System.out.println(i);
			}
		}
	}

	private static void recursive(int i) {
		// ループを使わない版。
		if (i <= NUM_END) {
			if (i % 15 == 0) { // 3でも5でも割り切れるのは15の倍数
				System.out.println("FizzBuzz");

			} else if (i % 3 == 0) {
				System.out.println("Fizz");
			
			} else if (i % 5 == 0) {
				System.out.println("Buzz");
			
			} else {
				System.out.println(i);
			}
			
			recursive(i+1);
		}
	}
	

	private static void unuseMod() {
		// %演算子を使わない版。
		// 3で割った答えに3を掛け算し、検算の結果
		// 元の数字に復元できた場合は
		// 3の倍数ということになります。
		for (int i = NUM_BGN; i <= NUM_END; i++) {
			if (i / 15 * 15 == i) {
				System.out.println("FizzBuzz");

			} else if (i / 3 * 3 == i) {
				System.out.println("Fizz");
			
			} else if (i / 5 * 5 == i) {
				System.out.println("Buzz");
			
			} else {
				System.out.println(i);
			}
		}
	}

	private static void dataTable() {
		// 倍数というものは同じ周期で繰り返される(3と5のFizzBuzzの場合
		// 1〜15までのパターンを延々と繰り返す)ため、1〜15までをデータテーブル化。
		final String[] tbl = {
			null,
			null,
			"Fizz",
			null,
			"Buzz",
			"Fizz",
			null,
			null,
			"Fizz",
			"Buzz",
			null,
			"Fizz",
			null,
			null,
			"FizzBuzz"
		};
		
		for (int i = NUM_BGN; i <= NUM_END; i++) {
			int idx = (i-1) % 15;
			if (tbl[idx] != null) {
				System.out.println(tbl[idx]);
			} else {
				System.out.println(i);
			}
		}
	}
}