Задача
Известно, что в школе не менее чем [latex]k_1[/latex] учеников, но не более чем [latex]k_2[/latex] учеников. Также известно, что каждый мальчик дружит с [latex]n[/latex] девочками, а каждая девочка с [latex]m[/latex] мальчиками. Какое минимальное количество учеников может быть в школе, и сколько в школе мальчиков и девочек?
Тесты:
№ | Ввод | Вывод |
1 | 20 30 4 5 | 27 15 12 |
2 | 40 50 5 4 | 45 20 25 |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> using namespace std; int main() { int k1, k2, n, m; int b, g; //b-boys;g-girls cin >> k1 >> k2 >> n >> m; for (g = n; true; g++) { b = g * m / n; if (((g * m) % n) == 0 && b + g >= k1) break; // перебираем варианты пока количество мальчиков не станет целым а сумма всех учеников будет больше k1 } cout << b + g << " " << b << " " << g << endl; return 0; } |
Решение:
Увеличиваем количество девочек на 1 пока количество мальчиков по формуле [latex]b = g \cdot m / n[/latex] не станет целочисельным значением и сумма мальчиков и девочек будет больше или равна минимальному возможному количеству учеников [latex]k_1[/latex].
- Условие задачи можно найти на сайте e-olymp.
- Ссылка на решение задачи на ideone.com здесь.
- Ссылка на полностью решенную задачу здесь.
— Должно быть [latex]k_1[/latex], а не [latex]k1[/latex].
— Нет отступов.
— В коде программы вместо знаков меньше и больше их коды.
— В формуле вместо знака умножения \cdot стоит звёздочка.
— «Ссылка на компилятор здесь» ‘- это не совсем компилятор. Сформулируйте иначе.
— Рубрика не обозначена.
— Ключевых слов (tags) нет.
— Нет никакой необходимости использовать double чтобы проверить делимость нацело. Для этого есть операция вычисления остатка от деления.
Спасибо, все исправил. Однако я не могу понимаю как операция вычисления остатка от деления может помочь в данном коде.
В 10-й строке Вы определяете количество мальчиков делением на n. А в 11-й строке проверяете удалось ли разделить нацело или какой-то из мальчиков оказался… не совсем целым. Вместо этого лучше проверить остаток от деления на n. Если остаток равен 0, то всё разделилось.
— Пожалуйста, используйте для хранения количества мальчиков и девочек только переменные целого типа. Я согласен, что программа работает и так, но с нецелыми мальчиками она слишком напоминает фильм «Техасская резня бензопилой 2», что переводит наш сайт в категорию «16+».
— Можете сдвинут break на одну табуляцию относительно if или разместить их в одной строке?
Теперь все мальчики целые. Спасибо за подсказку.
Ага. Заодно все отступы выбросили.
Забыл восстановить код после обновления. Спасибо.