Всем известен,
так называемый, принцип Дирихле, который формулируется следующим образом:
Предположим, что некоторое число кроликов рассажены в
клетках. Если число кроликов больше, чем число клеток, то хотя бы в одной из
клеток будет больше одного кролика.
В данной задаче
мы рассмотрим более общий случай этого классического математического факта.
Пусть имеется n клеток и m зайцев, которых рассадили по этим
клеткам. Рассчитайте максимальное количество зайцев, которое гарантированно
окажется в одной клетке.
Вход. В одной строке заданы два натуральных числа n и m
(1 ≤ n, m ≤ 109).
Выход. Выведите максимальное
количество зайцев, которое гарантированно окажется в одной клетке.
Пример
входа |
Пример
выхода |
2 3 |
2 |
элементарная
задача
Анализ алгоритма
Максимальное
количество зайцев, которое гарантированно окажется в одной клетке, равно . Это выражение можно вычислить так:
= (m + n
– 1) / n
Указанное
выражение на языке С можно также записать в виде:
= m / n
+ bool(m % n);
Результатом
операции преобразования типов bool(x) является:
·
0 (ложь), если x = 0;
·
1 (истина), если x ≠ 0;
Реализация алгоритма
Читаем входные
данные. Вычисляем и выводим ответ.
scanf("%d %d",&n,&m);
res = (m + n -
1) / n;
printf("%d\n",res);
Реализация алгоритма – условный оператор
#include <stdio.h>
int n, m, res;
int main(void)
{
scanf("%d
%d", &n, &m);
res = m / n;
if (m % n > 0)
res++;
printf("%d\n",
res);
return 0;
}
Реализация алгоритма – bool
#include <stdio.h>
int n, m, res;
int main(void)
{
scanf("%d
%d", &n, &m);
res = m / n + bool(m %
n);
printf("%d\n",
res);
return 0;
}
Java реализация
import java.util.*;
public class Main
{
public static void
main(String[] args)
{
Scanner con = new
Scanner(System.in);
int n = con.nextInt(), m = con.nextInt();
int res
= (m + n - 1) / n;
System.out.println(res);
}
}
Python реализация
n, m = map(int,input().split())
res = (m + n - 1) // n
print(res)