
Задача по языку программирования Pascal n школьников делят k яблок “поровну”, то есть так, чтобы
количество яблок, доставшихся любым двум школьникам, отличалось бы не более, чем на 1. Входные данные Программа получает на вход числа n и k. Выходные данные Программа должна вывести количество школьников, которым достанется яблок меньше, чем некоторым из их товарищей.

Ответы на вопрос

// Внимание! Если программа не работает, обновите версию!
Begin
var (n, k) := ReadInteger2('Введите n и k');
Writeln(k - (k div n) * n);
end.



Для решения данной задачи воспользуемся делением с остатком.
Сначала определим, сколько яблок достанется каждому школьнику, если они бы разделили их поровну. Для этого поделим общее количество яблок на количество школьников: avg := n div k.
Теперь у нас есть количество яблок, которые должны достаться каждому школьнику, чтобы они разделили их поровну. Однако, возможно, некоторым из школьников достанется на 1 яблоко больше, чтобы количество, доставшихся школьникам, отличалось бы не более, чем на 1. Поскольку мы уже знаем, что количество яблок avg, для кого-то из школьников будет увеличено на 1, а для остальных останется равным avg-1.
Теперь мы можем рассмотреть два случая:
1) Если k делит нацело n, то это означает, что количество школьников равномерно делится на количество яблок, то есть для каждого школьника достанется avg яблок.
В этом случае количество школьников, которым достанется меньше яблок, чем остальным, равно 0.
2) Если k не делит нацело n, то некоторым школьникам достанется avg+1 яблок, а остальным – avg.
При этом количество школьников, которым достанется меньше яблок, чем некоторым из их товарищей, будет равно остатку от деления n на k.
Таким образом, ответом на задачу будет min(n mod k, k - n mod k), где min(a, b) – функция, возвращающая минимальное значение из a и b.
Приведем пример кода на языке Pascal, реализующего решение задачи:
``` program CountStudentsWithLessApples;
var n, k, avg, result: Integer;
begin // Ввод данных readln(n, k);
// Расчет количества яблок, которые должны достаться каждому школьнику avg := n div k;
// Расчет количества школьников, которым достанется меньше яблок result := min(n mod k, k - n mod k);
// Вывод результата writeln(result); end. ```
Данный код сначала считывает входные данные - числа n и k. Затем производится расчет количества яблок, которые должны достаться каждому школьнику (avg) и количество школьников, которым достанется меньше яблок (result). Наконец, результат выводится на экран с помощью функции writeln.
Примечание: функция min(a, b) может быть реализована следующим образом:
``` function min(a, b: Integer): Integer; begin if a < b then min := a else min := b; end; ```
Эта функция возвращает минимальное значение из двух чисел a и b.


Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili