public static void Main()
new Multiple3Or5(3, 20).PrintOutput();
var n3 = new Multiple3Or5(3, 20);
Console.WriteLine(n3.GetNextNumber().Number == 5);
var n5 = new Multiple3Or5(5, 20);
Console.WriteLine(n5.GetNextNumber().Number == 6);
static void TestNReached()
var n3 = new Multiple3Or5(10, 10);
Console.WriteLine(n3.GetNextNumber() == null);
public Multiple3Or5(int num, int n) { Number = num; N = n; }
public int Number { get; private set; }
private int N { get; set; }
public void PrintOutput()
var next = GetNextNumber();
if (next == null) return;
Console.WriteLine(next.Number);
public Multiple3Or5 GetNextNumber()
int remainder3 = Number % 3;
int remainder5 = Number % 5;
PrintOutput(remainder3, remainder5);
int nextNum = Number + ((3 - remainder3) > (5 - remainder5) ? (5 - remainder5) : (3 - remainder3));
return (nextNum > N) ? null : new Multiple3Or5(nextNum, N);
private void PrintOutput(int r3, int r5)
Console.WriteLine("FizzBuzz");
Console.WriteLine("Fizz");
Console.WriteLine("Buzz");