Математические задачи
Сначала модель, потом код
В математических алгоритмических задачах основная трудность часто находится не в Java, а в переводе условия в точные вычисления. Полезно сначала ответить на три вопроса: что дано, что нужно получить и какие промежуточные величины связывают вход с ответом.
Например, нужно определить количество полных коробок, если в каждой помещается по 6 предметов, а всего предметов 38. Здесь достаточно целочисленного деления:
int items = 38;
int boxSize = 6;
int fullBoxes = items / boxSize; // 6
Если дополнительно нужно узнать, сколько предметов осталось вне полных коробок, используется остаток от деления:
int remaining = items % boxSize; // 2
Разбивай условие на маленькие шаги
Если ответ не получается одной формулой, это нормально. Часто проще вычислить несколько промежуточных значений и дать им понятные имена. Так код начинает повторять ход решения задачи.
Пусть цена товара равна 800, а скидка — 15 процентов. Можно отдельно вычислить размер скидки, а затем итоговую цену:
int price = 800;
int discountPercent = 15;
int discount = price * discountPercent / 100;
int finalPrice = price - discount;
Такой вариант проще проверить глазами, чем длинное выражение, в котором несколько действий спрятаны в одной строке.
Проверяй границы и смысл операций
Перед кодированием полезно вручную проверить решение на простых значениях: нуле, единице, минимальном допустимом входе и значении, где результат легко посчитать в уме. Это помогает заметить неверное округление, лишнее действие или ошибочную формулу ещё до запуска программы.
Особенно внимательно относись к целочисленному делению.
В выражении 5 / 2 результатом для типа int
будет 2, потому что дробная часть отбрасывается.
Если задача требует дробный результат, вычисление должно использовать подходящий числовой тип.