-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Условие задачи взято с сайт К. Ю. Полякова
Р-01. Рассматривается множество целых чисел, принадлежащих отрезку [1033; 7737], которые делятся на 5 и не делятся на 11, 17, 19 и 23. Найдите количество таких чисел и максимальное из них. В ответе запишите два числа через пробел: сначала количество, затем максимальное число.
Шаг 1. Создадим IntStream со значениями от 1033 до 7737. Чередой операций filter() сделаем выборку чисел (учитывая все условия задачи), а вызовом операции summaryStatistics() создадим экземпляр класса IntSummaryStatistics:
IntSummaryStatistics stats = IntStream.rangeClosed(1033, 7737)
.filter(num -> num % 5 == 0)
.filter(num -> num % 11 != 0)
.filter(num -> num % 17 != 0)
.filter(num -> num % 19 != 0)
.filter(num -> num % 23 != 0)
.summaryStatistics();Шаг 2. Получим и выведем ответ:
long count = stats.getCount();
long max = stats.getMax();
System.out.println(count + " " + max);
// > 1040 7730Полный код решения доступен по ссылке.
Шаг 1. Создадим IntStream со значениями от 1033 до 7737. Чередой операций filter() сделаем выборку чисел (учитывая все условия задачи), а вызовом операции count() найдём их количество:
long count = IntStream.rangeClosed(1033, 7737)
.filter(num -> num % 5 == 0)
.filter(num -> num % 11 != 0)
.filter(num -> num % 17 != 0)
.filter(num -> num % 19 != 0)
.filter(num -> num % 23 != 0)
.count();Шаг 2. Создадим IntStream со значениями от 1033 до 7737. Чередой операций filter() сделаем выборку чисел (учитывая все условия задачи), а вызовом операции max() найдём максимальное из них:
int max = IntStream.rangeClosed(1033, 7737)
.filter(num -> num % 5 == 0)
.filter(num -> num % 11 != 0)
.filter(num -> num % 17 != 0)
.filter(num -> num % 19 != 0)
.filter(num -> num % 23 != 0)
.max().orElse(0);Шаг 3. Выведем ответ:
System.out.println(count + " " + max);
// > 1040 7730Полный код решения доступен по ссылке.
Шаг 1. Создадим метод проверки числа на соответствие условиям задачи:
private static boolean check(int num) {
return (num % 5 == 0) && (num % 11 != 0) && (num % 17 != 0) && (num % 19 != 0) && (num % 23 != 0);
}Шаг 2. Создадим переменные count и max с начальным значением 0 (ноль):
int count = 0;
int max = 0;Шаг 3. При помощи цикла for организуем перебор всех целых чисел от 1033 до 7737, а методом check() проверим каждое из них на соответствие условиям задачи:
for (int num = 1033; num <= 7737; num++) {
if (check(num)) {
count++;
if (num > max) {
max = num;
}
}
}Т.к. числа перебираются в порядке возрастания, то проверку if (num > max) { ... (для нахождения максимального значения) можно не выполнять:
for (int num = 1033; num <= 7737; num++) {
if (check(num)) {
count++;
max = num;
}
}Шаг 4. Выведем ответ:
System.out.println(count + " " + max);
// > 1040 7730Полный код решения доступен по ссылке.