Реализация выбора и итерации
Введено| English | Значение |
|---|---|
| accumulator/əˈkjuːmjʊleɪtə/ | Аккумулятор |
Нулевой начальный максимум изобретает результат
- Массив содержит −8, −3 и −11. Начальное значение max, равное нулю, оставляет максимум, которого никогда не было в массиве.
- Для этого непустого массива начните max с a[0]. Сравнение последующих значений обновляет −8 до −3 и сохраняет его там.
Паттерны циклов: накопление
- Шаблон цикла — это повторяемый алгоритм для выполнения типичной задачи. Шаблон накопителя вычисляет промежуточную сумму или произведение на протяжении итераций.
- Начните с
sum = 0, затемsum = sum + xвнутри цикла; промежуточная сумма изменяется; она может уменьшаться при добавлении отрицательного значения. Та же логика применяется к промежуточному счетчику (count++) или промежуточному максимуму.
Условные операторы внутри циклов
- Поместите
ifвнутрь цикла, чтобы он обрабатывал только элементы, удовлетворяющие условию. «Подсчитать четные числа»: цикл, иif (x % 2 == 0) count++; - Цикл посещает каждый элемент; оператор
ifрешает, какие из них следует обработать. Комбинация выбора и повторения составляет основу большинства алгоритмов.
Поиск максимума
- Чтобы найти наибольшее значение, храните переменную
maxи обновляйте её, когда встречаете большее значение. Проверьте, что массив не пуст, начните соmax, равным первому значению, а затем проверьте остальные. Указанное «очень маленькое число» все равно может превышать любой фактический ввод. if (x > max) { max = x; }внутри цикла. После завершения циклаmaxбудет содержать найденное максимальное значение.
Шаблон аккумуляторного суммирования
sum накапливает результат по проходам; она начинается с 0.
Чтобы построить накопительную СУММУ в цикле, следует инициализировать аккумулятор значением...
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Сумма начинается с 0; произведение должно начинаться с 1.
Чтобы построить накопительное ПРОИЗВЕДЕНИЕ, инициализируйте аккумулятор значением...
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Начало произведения с 0 делает его всегда равным 0; начинайте с 1.
Для подсчета четных чисел во время обхода используйте...
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
if выбирает, какие элементы считает цикл.
Размещение инициализации аккумулятора внутри цикла сбрасывает ее каждый проход.
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
Инициируйте переменную перед циклом, а не внутри него.
Чтобы остановить цикл сразу после нахождения целевого значения, используйте...
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
break прерывает ближайший вложенный цикл. Логический флаг также должен использоваться в условии цикла или управляющей логике; простое присвоение не останавливает выполнение.
Ранний выход с флагом или оператором break
- Иногда можно досрочно завершить поиск после нахождения нужного элемента. Флаг
booleanможет зафиксировать факт находки и быть проверен условием цикла; присвоение флага само по себе не прерывает цикл.breakнемедленно прерывает ближайший (внутренний) цикл. - «Содержит ли список ноль?» — остановиться при первом нуле. Досрочный выход экономит ресурсы, но логика должна корректно обрабатывать случай «не найдено».
Инициализируйте накопитель правильно, иначе все результаты будут ошибочными. Сумма начинается с 0, произведение — со 1 (начало произведения со 0 сделает его всегда равным 0), максимум — с первого элемента после проверки на непустоту. Пустое множество не имеет максимума, если договор explicitly не предусматривает отдельный результат. Обновляйте значение на каждой подходящей итерации — неправильная инициализация внутри цикла сбрасывает накопитель на каждой проходе и искажает итог.
What is the maximum of the nonempty array {−8, −3, −11}?
Сложность 2/5 · 140 монет + небольшой бонус за первое выполнение сегодня
−3 is the greatest actual element. Starting at 0 produces an invalid invented candidate.
Чтение a[0] является допустимым способом инициализации максимума для пустого массива.
Сложность 1/5 · 100 монет + небольшой бонус за первое выполнение сегодня
В пустом массиве нет первого элемента. Проверьте входные данные или определите отдельный исходный случай отсутствия максимума.
Сколько четных чисел содержится в целочисленном массиве {-8, -3, -11}?
Сложность 2/5 · 140 монет + небольшой бонус за первое выполнение сегодня
Только -8 дает остаток ноль при делении на 2; отрицательные значения также могут быть четными.
Подсчет четных элементов в цикле по массиву a:
int count = 0;for (int i = 0; i < a.length; i++) { if (a[i] % 2 == 0) count++; }- Цикл посещает каждый элемент;
ifсчитает только четные.
Перенесите рассуждения на новый случай
- Пустой массив не имеет первого элемента и требует отдельного договора или проверки.
- Начальное значение должно соответствовать операции: для суммы — ноль, для произведения — единица, для максимума — допустимый начальный кандидат.
Типичные шаблоны циклов объединяют итерацию и выбор: накопитель (sum += x, счётчик или текущий максимум), формируемый на протяжении проходов, с использованием оператора if для обработки только подходящих элементов. Инициализируйте накопитель правильно (сумма 0, произведение 1, максимум — первое значение) и рассмотрите ранний выход (break/флаг), как только ответ найден.