ภาพรวม
FizzBuzz เป็นโจทย์เขียนโปรแกรมคลาสสิกที่ใช้สัมภาษณ์งานเขียนโปรแกรมมักนำมาใช้ ทำการพิมพ์ตัวเลข 1 ถึง 100 โดย:
- หาร 3 ลงตัว → พิมพ์ "Fizz"
- หาร 5 ลงตัว → พิมพ์ "Buzz"
- หาร 3 และ 5 ลงตัว (คือ หาร 15 ลงตัว) → พิมพ์ "FizzBuzz"
- อื่นๆ → พิมพ์ตัวเลขนั้นเอง
ตัวอย่างโปรแกรม
using System;
namespace FizzBuzzDemo
{
public class Example
{
static void Main(string[] args)
{
for (int i = 1; i <= 100; i++)
{
if (i % 3 == 0 && i % 5 == 0)
Console.WriteLine("FizzBuzz");
else if (i % 3 == 0)
Console.WriteLine("Fizz");
else if (i % 5 == 0)
Console.WriteLine("Buzz");
else
Console.WriteLine(i);
}
}
}
}ผลลัพธ์ (บางส่วน)
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz ... 97 98 Fizz Buzz
คำอธิบายตรรกะ
for (int i = 1; i <= 100; i++)
{
if (i % 3 == 0 && i % 5 == 0) // ตรวจสอบ 15 ก่อน (สำคัญ!)
Console.WriteLine("FizzBuzz");
else if (i % 3 == 0)
Console.WriteLine("Fizz");
else if (i % 5 == 0)
Console.WriteLine("Buzz");
else
Console.WriteLine(i);
}สำคัญ: ต้องตรวจสอบเงื่อนไข FizzBuzz (หาร 15 ลงตัว) ก่อน ตรวจสอบ Fizz หรือ Buzz แยกกัน มิฉะนั้น 15, 30, 45... จะถูกจับโดยเงื่อนไขแรกที่ตรง (Fizz หรือ Buzz) และไม่ได้พิมพ์ FizzBuzz
รูปแบบอื่นๆ (Alternative Approaches)
1. ใช้ String Builder / Concatenation
for (int i = 1; i <= 100; i++)
{
string output = "";
if (i % 3 == 0) output += "Fizz";
if (i % 5 == 0) output += "Buzz";
Console.WriteLine(output == "" ? i.ToString() : output);
}2. ใช้ Pattern Matching (C# 7.0+)
for (int i = 1; i <= 100; i++)
{
Console.WriteLine((i % 3, i % 5) switch
{
(0, 0) => "FizzBuzz",
(0, _) => "Fizz",
(_, 0) => "Buzz",
_ => i.ToString()
});
}3. LINQ One-liner
using System.Linq;
Enumerable.Range(1, 100)
.Select(i => (i % 3, i % 5) switch
{
(0, 0) => "FizzBuzz",
(0, _) => "Fizz",
(_, 0) => "Buzz",
_ => i.ToString()
})
.ToList()
.ForEach(Console.WriteLine);ข้อสังเกตสำคัญ
- FizzBuzz ทดสอบตรรกะพื้นฐาน: ลูป, เงื่อนไข, Modulo operator
- ลำดับการตรวจสอบเงื่อนไขสำคัญมาก (FizzBuzz ก่อน Fizz/Buzz)
- รูปแบบ String Concatenation ยืดหยุ่นกว่า (ง่ายต่อการเพิ่มกฎใหม่ เช่น "FizzBuzzBang" สำหรับ 7)
- ในทางปฏิบัติ ใช้
StringBuilderหากสร้างสตริงขนาดใหญ่