โจทย์ FizzBuzz
โจทย์คลาสสิกสำหรับสัมภาษณ์โปรแกรมเมอร์:
- เลขที่หาร 3 ลงตัว → แสดง "Fizz"
- เลขที่หาร 5 ลงตัว → แสดง "Buzz"
- เลขที่หาร 3 และ 5 ลงตัว (คือ หาร 15 ลงตัว) → แสดง "FizzBuzz"
- เลขอื่นๆ → แสดงตัวเลขนั้นๆ
โค้ดตัวอย่างพื้นฐาน (1 ถึง 100)
using System;
class Demo {
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-20)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
วิธีการเขียนแบบต่างๆ (Best Practices)
1. String Builder Approach (ประหยัดหน่วยความจำ)
for (int i = 1; i <= 100; i++) {
StringBuilder sb = new StringBuilder();
if (i % 3 == 0) sb.Append("Fizz");
if (i % 5 == 0) sb.Append("Buzz");
Console.WriteLine(sb.Length > 0 ? sb.ToString() : i.ToString());
}
2. Ternary Operator (Concise)
for (int i = 1; i <= 100; i++) {
Console.WriteLine(
i % 15 == 0 ? "FizzBuzz" :
i % 3 == 0 ? "Fizz" :
i % 5 == 0 ? "Buzz" :
i.ToString()
);
}
3. 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()
});
}
4. LINQ Functional Style
var fizzBuzz = Enumerable.Range(1, 100)
.Select(i => i % 15 == 0 ? "FizzBuzz" :
i % 3 == 0 ? "Fizz" :
i % 5 == 0 ? "Buzz" :
i.ToString());
foreach (var item in fizzBuzz) {
Console.WriteLine(item);
}
การขยายโจทย์ (Extended FizzBuzz)
// กฎเพิ่มเติม: หาร 7 ลงตัว -> "Bang"
var rules = new Dictionary {
{ 3, "Fizz" },
{ 5, "Buzz" },
{ 7, "Bang" }
};
for (int i = 1; i <= 105; i++) {
StringBuilder sb = new StringBuilder();
foreach (var rule in rules) {
if (i % rule.Key == 0) sb.Append(rule.Value);
}
Console.WriteLine(sb.Length > 0 ? sb.ToString() : i.ToString());
}
จุดสังเกตสำคัญ
- ตรวจสอบ FizzBuzz (หาร 15) ก่อน Fizz และ Buzz เดียวๆ
- ลำดับ if-else สำคัญมาก - ถ้าสลับจะผิด
- ใช้
StringBuilderหรือ String Interpolation สำหรับ Performance - FizzBuzz ทดสอบ: Logic, Control Flow, Modulo Operator, String Handling