Writing FizzBuzz

后端 未结 30 1912
庸人自扰
庸人自扰 2020-12-04 08:50

Reading the coding horror, I just came across the FizzBuzz another time.

The original post is here: Coding Horror: Why Can\'t Programmers.. Program?

For thos

相关标签:
30条回答
  • 2020-12-04 09:28

    The FizzBuzz question is a great interview question. We have started using it in our interview process. It is astounding how many people cannot solve such a simple problem.

    Keep in mind, the original blog post was eventually locked due to a flood of people posting more solutions. Hahaha.

    Regardless, here is mine in C++! ^_^

    #include <iostream>
    using namespace std;
    
    int main(int argc, char** argv)
    {
        for (int i = 1; i <= 100; ++i)
        {
            bool isMultipleOfThree = (i % 3) == 0;
            bool isMultipleOfFive = (i % 5) == 0;
    
            if (isMultipleOfThree) cout << "Fizz";
            if (isMultipleOfFive) cout << "Buzz";
            if (!isMultipleOfThree && !isMultipleOfFive) cout << i;
    
            cout << '\n';
        }
    
        return 0;
    }
    
    0 讨论(0)
  • 2020-12-04 09:29
    public void DoFizzBuzz()
    {
        for (int i = 1; i <= 100; i++)
        {
            if (i % 3 == 0)
                Console.Write("Fizz");
            if (i % 5 == 0)
                Console.Write("Buzz");
            if (!(i % 3 == 0 || i % 5 == 0))
                Console.Write(i);
    
            Console.Write(Environment.NewLine);
        }
    }
    

    This gets rid of the bool found, but forces you to do duplicate evaluation. It is slightly different from some of the other answers using i % 15 == 0 for the FizzBuzz qualification. Whether or not this is better is up for debate. However, it is a different way.

    0 讨论(0)
  • 2020-12-04 09:32

    Linq:

    Enumerable.Range(1, 100).ToList().ForEach(i => Console.WriteLine( i % 3 * i % 5 == 0 ? (i % 3 == 0 ? "Fizz" : "") + (i % 5 == 0 ? "Buzz" : "") : i.ToString()));
    
    0 讨论(0)
  • 2020-12-04 09:32

    With no if conditions, just one ternary operator.

    string[] s = new string[6]{"Fizz", "Buzz", "", "", "", ""};
    for (int i = 1; i <= 100; i++)
    {
        string output = s[(i%3)*2] + s[(i%5)+1];
        Console.WriteLine(string.IsNullOrEmpty(output)? "" + i : output);
    }
    
    0 讨论(0)
  • 2020-12-04 09:33

    Ok, what the heck, here's the solution I've come to like :)

    public void DoFizzBuzz()
    {
        for (int i = 1; i <= 100; ++i)
        {
            bool isDivisibleByThree = i % 3 == 0;
            bool isDivisibleByFive = i % 5 == 0;
    
            if (isDivisibleByThree || isDivisibleByFive)
            {
                if (isDivisibleByThree)
                    cout << "Fizz";
    
                if (isDivisibleByFive)
                    cout << "Buzz";
            }
            else
            {
                cout << i;
            }
            cout << endl;
        }
    }
    

    Obviously, this is not the fastest solution, but I like it because it emphasizes readability and makes the "FizzBuzz" case no longer a special case, but something that will happen naturally through the code path.

    In the end, what I love most about this question whenever it comes up is that we get to see just how many different solutions ppl can come up with.

    0 讨论(0)
  • 2020-12-04 09:33

    The original questions were: 1.How to get rid of the bool found? 2.Is there a better way of testing than the foreach?

    This gets rid of the bool and the foreach, and I think it's still readable.

    public static void DoFizzBuzz()
    {
        var combinations = new Tuple<int, string>[]  
        {  
            new Tuple<int, string> (3, "Fizz"),  
            new Tuple<int, string> (5, "Buzz"),  
        };
    
        for (int i = 1; i <= 100; i++)
        {
            var fb = combinations.Where(t => {
                if (i % t.Item1 == 0)
                {
                    Console.Write(t.Item2);
                    return true;
                }
                return false;
            }).ToList();
    
            if (!fb.Any())
            {
                Console.Write(i);
            }
    
            Console.Write(Environment.NewLine);
        }
    } 
    

    Who'd a thunk we'd be getting so excited about a simple kids game? :)

    0 讨论(0)
提交回复
热议问题