Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

โปรแกรม FizzBuzz ใน C#

ภาพรวม

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 หากสร้างสตริงขนาดใหญ่