Указываем число n
. В диапазоне от 1 до n
выводим каждый элемент, но только стрингой. Если число кратное 3 - заменяем вывод на "Fizz"
, если кратно 5 - заменяем вывод на "Buzz"
, а если кратно и 3 и 5 - на "FizzBuzz"
В моей реализации первых два условия выполняется, третье не выполняется никогда:
static IList<string> FizzBuzz(int n) {
List<string> result = new List<string>();
for(int i =1; i<=n; i++)
{
if (i % 3 == 0)
result.Add("Fizz");
else if (i % 5 == 0)
result.Add("Buzz");
else if (i % 15 == 0)
result.Add("FizzBuzz");
else
result.Add(i.ToString());
}
foreach (var item in result)
Console.WriteLine(item);
return result;
}
Ожидаемый результат:
n = 15,
Вывод:
[
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
**"FizzBuzz"**
]
А по факту имеем:
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
**"Fizz"**
Как пофиксить, чтобы проверка на кратность на 3 не прерывала проверку на кратность на 3 и 5?
Есть какой либо более шустрый способ решения этой же задачи?
Если число делится на 15, то оно делится и на 3 и на 5.
Поэтому проверку делимости на 15 нужно делать раньше:
if (i % 15 == 0) result.Add("FizzBuzz");
else if (i % 3 == 0) result.Add("Fizz");
else if (i % 5 == 0) result.Add("Buzz");
else result.Add(i.ToString());
P.S. Если убрать все else, то «Fizz» и «Buzz» будут выводиться вместе с «FizzBuzz», что, вроде, нежелательно.
P.S.S. Если ввести в гугл «C# FizzBuzz» найдется множество решений этой задачи (например), которые можно сравнить со своим.
Дело в том, что у вас срабатывает первый if (i % 3 == 0) на число 15, т.к. оно соответствует проверке. Я бы предложил проверять сначало на if (i % 15 == 0), а потом уже на 3 и 5. И тут else if (i % 15 == 0) вы проверяете, кратное ли это число - 15, а не 3 и 5. Я думаю данное решение будет неплохим.
if (i % 3 == 0 && i % 5 == 0)
{
result.Add("FizzBuzz");
}
else if (i % 3 == 0)
{
result.Add("Fizz");
}
else if (i % 5 == 0)
{
result.Add("Buzz");
}
else
{
result.Add(i.ToString());
}
Прозрение пришло ко мне! Я случайно додумался убрать все else
static IList<string> FizzBuzz(int n)
{
List<string> result = new List<string>();
for(int i =1; i<=n; i++)
{
if (i % 3 == 0)
result.Add("Fizz");
if (i % 5 == 0)
result.Add("Buzz");
if (i % 15 == 0)
result.Add("FizzBuzz");
else
result.Add(i.ToString());
}
foreach (var item in result)
Console.WriteLine(item);
return result;
}
Мне кажется выглядит ужасно, но зато работает.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Использую ETW Logging чтобы записат лог в Windows Event ViewerУстановил пакет Microsoft
Есть набор символов, которые одинаково выглядят как на русском так и на английском языках (А,В,С,Е,Н,К,М,О,Р,Т,Х)Мне хотелось бы сравнивать эти...
Скачал с nuget jQuery contextMenuВсё необходимое подключил к проекту